1

我有一个包含动态生成表的数据库。我正在编写一个存储过程来对生成的表执行查询,我需要在查询分析器工具(或类似工具)中查看结果。

我目前拥有的是:

DECLARE @TableName sysname

DECLARE TableNameCursor CURSOR FOR
SELECT TableName FROM [xxxTables] WHERE xxx...

OPEN TableNameCursor
FETCH NEXT FROM TableNameCursor INTO @TableName

WHILE @@FETCH_STATUS = 0
BEGIN
    DECLARE @Query nvarchar
    SET @Query = 'SELECT * FROM ' + @TableName
    EXEC sp_executesql @Query

    -- This is executed as long as the previous fetch succeeds.
    FETCH NEXT FROM TableNameCursor INTO @TableName
END

但由于我有多个选择,我没有得到输出。如何修复存储过程以显示结果?

所有的桌子都有相同的布局,所以我可以加入它们。

4

1 回答 1

2

除非这只是在此处发布脚本时产生的错字,否则我可能终于找到了问题所在。您尚未指定@Query变量的最大长度:

DECLARE @Query nvarchar

在这种情况下,最大长度默认为1,根据手册

数据定义或变量声明语句中n未指定时,默认长度为 1 。未使用 CAST 函数指定时,默认长度为 30 。n

当您将查询字符串分配给 时@Query,它只存储第一个字符。自然,当您稍后尝试执行查询时,它不会返回任何内容,而是会产生错误。

您可以通过指定最大长度来修复它。在 SQL Server 2005 或更高版本中,它可以是显式数字(最多 4000)或max

DECLARE @Query nvarchar(max)

在早期版本max中不支持,因此只需使用明确的数字:

DECLARE @Query nvarchar(4000)
于 2012-05-28T09:46:57.860 回答