表变量和执行

ale*_*555 5 t-sql 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);
Run Code Online (Sandbox Code Playgroud)

返回以下错误

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

aF.*_*aF. 8

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

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


为了解决这个问题,你可以使用temporary table

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
Run Code Online (Sandbox Code Playgroud)

将表放在范围内:

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
Run Code Online (Sandbox Code Playgroud)