6

コマンド文字列の実行中にテーブル変数を使用するにはどうすればよいですか?

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);

次のエラーを返します

メッセージ1087、レベル15、状態2、行1テーブル変数「@FileIDs」を宣言する必要があります。

4

3 に答える 3

6

テーブル@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

または、テーブルをスコープに入れます。

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
于 2012-07-06T10:23:43.760 に答える
4

実際、テーブルは範囲外です。これを試してください。

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
于 2012-07-06T10:52:06.990 に答える
2
 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
于 2012-07-06T10:44:18.773 に答える