2010-03-26 3 views
0

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

IF (@NewItemCount<@OldItemCount) 
    BEGIN 
     set @[email protected]@NewItemCount 
     if(@count>0) 
     BEGIN 
      Delete from ItemDetails where GroupId in (Select Top @count Id from ItemDetails where [email protected]_GroupId) 
     END 
    END 

Ошибка

Неправильный синтаксис около '@count'.

+0

Что вы пытаетесь сделать здесь, на самом деле это не имеет смысла ... На базовом уровне вам нужно @Count = Id в вашем подзаголовке, но не знаете, что что будет делать ... – Paddy

+0

равно как потеряно - попробуйте указать, что вы делаете простыми словами, без какого-либо кода. –

ответ

1

Если вы собираетесь идти вниз динамический маршрут SQL я бы рекомендовал прочитать this excellent article first

Edit:

Обертывание @count переменной в скобках должно работать для вас:

IF (@NewItemCount<@OldItemCount) 
BEGIN 
    set @[email protected]@NewItemCount 
    if(@count>0) 
    BEGIN 
     Delete from ItemDetails where GroupId in (Select Top(@count) Id from ItemDetails where [email protected]_GroupId) 
    END 
END 
3

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

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

+0

может показать один пример – user42348

2

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

DECLARE @CNT INT 
SET @CNT = 5 

SELECT TOP (@CNT) * 
FROM MYTABLE 
+0

Ошибка его отображения в виде неправильного синтаксиса рядом с '('. Не работает – user42348

+0

У вас действительно есть SQL Server 2005? – van