关注sql中的Top

时间:2010-03-26 11:01:48

标签: sql-server-2005

我有变量@count of datatype 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 个答案:

答案 0 :(得分:3)

此位置无法使用变量。

一种解决方案是使用动态sql:构建要在字符串变量中执行的完整查询字符串并执行该操作。

答案 1 :(得分:2)

这在SQL Server 2005 没有 任何动态SQL的情况下开箱即用。
你只是缺少括号。以下作品很有魅力:

DECLARE @CNT INT
SET @CNT = 5

SELECT  TOP (@CNT) *
FROM    MYTABLE

答案 2 :(得分:1)

如果您打算沿着动态SQL路线走下去,我建议您阅读this excellent article first

编辑:

将@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