显式命令工作,而它的TSQL等效引发错误

时间:2013-07-24 18:30:22

标签: sql sql-server tsql scope

错误:

  

找不到存储过程'SELECT TOP 1 name FROM(SELECT TOP 5 name FROM sys.tables ORDER BY name DESC)as t ORDER BY name ASC'。

代码:

WHILE (@interval <= @max)
BEGIN
    SET @SQL = 'SELECT TOP 1 name FROM (' +
        SELECT TOP ' + convert(varchar(10), @interval) + 
        ' name FROM sys.tables ORDER BY name DESC) as t ORDER BY name ASC'
    EXEC @SQL
    SELECT @interval = @interval + 1
END

执行以下命令可以正常工作:

SELECT TOP 1 name 
FROM 
    (SELECT TOP 5 name 
     FROM sys.tables 
     ORDER BY name DESC) as t 
ORDER BY 
     name ASC

手动增加内部TOP#并在没有TSQL的情况下运行命令将正确地旋转每个表。 (这最终将包括Column的嵌套循环,以及该列中搜索的另一个嵌套循环。)

命令在没有变量的情况下运行会让我觉得这是一个范围问题。我不能通过将表名列表插入到具有种子1的主键,对于row_id的增量1,然后通过递增我的@row_id = row_id来循环表的临时表中来解决这个问题吗? p>

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

应该是exec(@sql),我认为