我有此代码:
DECLARE @mytable TABLE (x INT);
EXECUTE ('SELECT * FROM ' + @mytable);
运行代码时,出现此错误:
必须声明标量变量“ @mytable”。
我知道@mytable
变量的类型为TABLE
,应该为VARCHAR
,但是如何解决呢?
答案 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';