显式命令有效,而其 TSQL 等效项引发错误

Posted

技术标签:

【中文标题】显式命令有效,而其 TSQL 等效项引发错误【英文标题】:Explicit command work, while its TSQL equivalent throws an error 【发布时间】:2013-07-24 18:30:22 【问题描述】:

错误:

找不到存储过程 '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 循环遍历表?

有什么建议吗?

【问题讨论】:

可能只是复制/粘贴错误,但您在 SELECT 之前缺少单引号。 【参考方案1】:

我想应该是exec(@sql)

【讨论】:

做到了。谢谢你,chue x!

以上是关于显式命令有效,而其 TSQL 等效项引发错误的主要内容,如果未能解决你的问题,请参考以下文章

请帮助将 Tsql“隐式连接”转换为显式连接

默认(类型)的编程等效项

使用 GHCi 时如何为函数提供显式类型声明?

它们在隐式 ctor、无参数空体 ctor 和显式默认 ctor 之间是不是等效?

防止VS向csproj添加显式编译标签

TSQL 数据类型转换