Tsql 表变量和exec

Tsql 表变量和exec,tsql,exec,local-variables,Tsql,Exec,Local Variables,如何在执行命令字符串时使用表变量 DECLARE @FileIDs TABLE ( File_ID int ) insert into @FileIDs select ID from Files where Name like '%bla%'; DECLARE @testquery as varchar(max); set @testquery = 'select * from @FileIDs'; exec(@testquery); 返回以下错误 Msg 1087,第15级,第2状

如何在执行命令字符串时使用表变量

DECLARE @FileIDs TABLE 
(
   File_ID int
)
insert into @FileIDs select ID from Files where Name like '%bla%';

DECLARE @testquery as varchar(max);
set @testquery = 'select * from @FileIDs';
exec(@testquery);
返回以下错误

Msg 1087,第15级,第2状态,第1行
必须声明表变量“@FileIDs”。

@FileIDs
不在
exec(@testquery)
的范围内

这就是为什么你有这个问题


要解决此问题,您可以使用
临时表

CREATE table #FileIDs
(
   File_ID int
)
insert into #FileIDs select ID from Files where Name like '%bla%'; 

DECLARE @testquery as varchar(max);
set @testquery = 'select * from #FileIDs';
exec(@testquery);

drop table #FileIDs
将表格放入范围:

DECLARE @sql nvarchar(2000)

SET @sql='DECLARE @FileIDs TABLE (   File_ID int);'
SET @sql=@sql+'insert into @FileIDs select ID from Files where Name like ''%bla%'';'
set @sql=@sql+ 'select * from @FileIDs;'
EXECUTE sp_executesql @sql

确实,表超出了范围,请尝试以下操作:

DECLARE @sql nvarchar(2000)

SET @sql='DECLARE @FileIDs TABLE (   File_ID int);'
SET @sql=@sql+'insert into @FileIDs select ID from Files where Name like ''%bla%'';'
set @sql=@sql+ 'select * from @FileIDs;'
EXECUTE sp_executesql @sql

在插入中,您有
@
,您应该有
#
@alex555,没问题!如果有效,你应该接受一个答案:
DECLARE @sql nvarchar(2000)

SET @sql='DECLARE @FileIDs TABLE (   File_ID int);'
SET @sql=@sql+'insert into @FileIDs select ID from Files where Name like ''%bla%'';'
set @sql=@sql+ 'select * from @FileIDs;'
EXECUTE sp_executesql @sql