Помогите с ХП
От: Jcomp Украина  
Дата: 19.09.02 13:19
Оценка:
Есть ХП:

CREATE PROCEDURE selectSongsByDateTemp @Day int, @Month int, @Year int, @fromP int
AS

SELECT TOP 10 * from (

SELECT TOP @fromP HitParad.id,HitParad.Composition, Sum(vote_HitParad.Points) AS [Sum-Points], HitParad.Performer, HitParad.current_date_now, Day(current_date_now) AS Date,
MONTH(current_date_now) AS Month, YEAR(current_date_now)
AS Year
FROM HitParad INNER JOIN vote_HitParad ON HitParad.id = vote_HitParad.id_song AND (Day(vote_HitParad.[Date])<=@Day ) AND (Month(vote_HitParad.[Date])<=@Month ) AND (Year(vote_HitParad.[Date])<=@Year )
GROUP BY HitParad.id,HitParad.Composition, HitParad.Performer, HitParad.current_date_now
order by [Sum-Points] desc ) as S

Выдает ошибку в строке SELECT TOP @fromP ... если @fromP меняю явно на число то все пашет.. В чем проблема ???
Re: Помогите с ХП
От: Merle Австрия http://rsdn.ru
Дата: 19.09.02 13:44
Оценка:
Здравствуйте Jcomp, Вы писали:

J>Выдает ошибку в строке SELECT TOP @fromP ... если @fromP меняю явно на число то все пашет.. В чем проблема ???

Написал бы хоть сервер какой.

А дело скорее всего в сервере... Это MSSQL на сколько я понимаю, а он не умеет с переменными TOP работать..
Мы уже победили, просто это еще не так заметно...
Re[2]: Помогите с ХП
От: Jcomp Украина  
Дата: 19.09.02 13:49
Оценка:
Здравствуйте Merle, Вы писали:

M>Здравствуйте Jcomp, Вы писали:


J>>Выдает ошибку в строке SELECT TOP @fromP ... если @fromP меняю явно на число то все пашет.. В чем проблема ???



M>Написал бы хоть сервер какой.

MS SQL 7.0
M>А дело скорее всего в сервере... Это MSSQL на сколько я понимаю, а он не умеет с переменными TOP работать..
Умеет ... раз так работает Select top 10 * from table
Значит умеет
Re[3]: Помогите с ХП
От: AndreyT  
Дата: 19.09.02 13:58
Оценка:
Здравствуйте Jcomp, Вы писали:

J>Здравствуйте Merle, Вы писали:


M>>Здравствуйте Jcomp, Вы писали:


J>>>Выдает ошибку в строке SELECT TOP @fromP ... если @fromP меняю явно на число то все пашет.. В чем проблема ???


J>

M>>Написал бы хоть сервер какой.
J>MS SQL 7.0
M>>А дело скорее всего в сервере... Это MSSQL на сколько я понимаю, а он не умеет с переменными TOP работать..
J>Умеет ... раз так работает Select top 10 * from table
J>Значит умеет

В примере "select top 10 from * ..." 10 — это не переменная, это константа.
С константами он работает, а с переменными — нет
Re[3]: Помогите с ХП
От: Merle Австрия http://rsdn.ru
Дата: 19.09.02 14:03
Оценка:
Здравствуйте Jcomp, Вы писали:

J>Умеет ... раз так работает Select top 10 * from table

J>Значит умеет
Да ну? Логика однако... Если напрямую число указать, то да, работает, а если указать переменную, то нет, так как судя по всему во время разбора запроса в ключевые слова числа вместо переменных не подставляются.
В BOL про переменные в TOP ничего не сказано, к сожалению сходу ничего не нашел...

В твоем случае может помочь такой способ:

execute('.... select top' + @fromP + '....')

Это если надо чтобы быстро заработало.
Мы уже победили, просто это еще не так заметно...
Re[2]: Помогите с ХП
От: Lexey Россия  
Дата: 22.09.02 08:48
Оценка:
Здравствуйте Merle, Вы писали:

J>>Выдает ошибку в строке SELECT TOP @fromP ... если @fromP меняю явно на число то все пашет.. В чем проблема ???

M>Написал бы хоть сервер какой.

M>А дело скорее всего в сервере... Это MSSQL на сколько я понимаю, а он не умеет с переменными TOP работать..


Именно так и есть.
Возможно поможет SET ROWCOUNT @fromP вместо TOP.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.