如何在EXECUTE命令中使用表变量?

时间:2018-11-06 18:46:03

标签: sql sql-server tsql

我有此代码:

DECLARE @mytable TABLE (x INT);
EXECUTE ('SELECT * FROM ' + @mytable);

运行代码时,出现此错误:

  

必须声明标量变量“ @mytable”。

我知道@mytable变量的类型为TABLE,应该为VARCHAR,但是如何解决呢?

2 个答案:

答案 0 :(得分:2)

您可以将整个内容用引号引起来:

EXECUTE( '
DECLARE @mytable TABLE(x int);
SELECT * from @mytable' )

另一种选择是将其滚动到各种变量中,并连接它们,然后运行查询:

DECLARE @sql_declarations NVARCHAR(1000)
DECLARE @sql_query NVARCHAR(1000)
DECLARE @sql_final NVARCHAR(4000)

SET @sql_declarations = N'declare @mytable TABLE(x int);'
SET @sql_query = N'SELECT * from @mytable;'
SET @sql_final = @sql_declarations + @sql_query

exec sp_executesql @sql_final

答案 1 :(得分:1)

您不能。

这是不可能的,因为表变量与动态SQL的范围是隔离的。您只能使用临时表和普通表。

或使用动态SQL声明为

EXECUTE sp_executesql N'DECLARE @MyTABLE TABLE (x int); 
                        INSERT INTO @MyTable VALUES (1);
                        SELECT * FROM @MyTable';