Обеспокоен Топ в sql - PullRequest
       2

Обеспокоен Топ в sql

0 голосов
/ 26 марта 2010

У меня есть переменная @count типа данных int. Я устанавливаю значения для этого @ count.
Я хочу выбрать top @count количество строк в таблице.Когда я использую Select top @count, отображается ошибка.

  IF (@NewItemCount<@OldItemCount)
    BEGIN
        set @count=@OldItemCount-@NewItemCount
        if(@count>0)
        BEGIN
            Delete from ItemDetails where  GroupId in (Select Top @count  Id from ItemDetails where GroupId=@Prm_GroupId )
        END
    END

Ошибка:

Неверный синтаксис рядом с'@count'.

Ответы [ 3 ]

3 голосов
/ 26 марта 2010

Невозможно использовать переменную в этом месте.

Одним из решений было бы использование динамического sql: построить полную строку запроса, которую вы хотите выполнить в строковой переменной, и она уже выполнена.

2 голосов
/ 26 марта 2010

Это работает из коробки на SQL Server 2005 без любого динамического SQL.
Вы просто пропустили скобки. Следующие работы как очарование:

DECLARE @CNT INT
SET @CNT = 5

SELECT  TOP (@CNT) *
FROM    MYTABLE
1 голос
/ 26 марта 2010

Если вы собираетесь пойти по динамическому маршруту SQL, я бы рекомендовал вам сначала прочитать эту прекрасную статью

Edit:

Заключение переменной @count в скобки должно работать для вас:

 IF (@NewItemCount<@OldItemCount)
BEGIN
    set @count=@OldItemCount-@NewItemCount
    if(@count>0)
    BEGIN
        Delete from ItemDetails where  GroupId in (Select Top(@count)  Id from ItemDetails where GroupId=@Prm_GroupId )
    END
END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...