2012-07-06 4 views
3

명령 문자열을 실행하는 동안 어떻게 테이블 변수를 사용할 수 있습니까?테이블 변수 및 exec

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

테이블 변수 "@FileIDs"를 선언해야합니다 다음과 같은 오류

에게 메시지 1087, 수준 15, 상태 2, 줄 1 을 반환합니다.

답변

2

@FileIDsexec(@testquery)의 범위에 속하지 않습니다.

그런 이유로 그 문제가 있습니다.


당신이 사용할 수 있습니다이 문제를 해결하기 위해 temporary table :

DECLARE @sql nvarchar(2000) 

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

어떻게 해결할 수 있습니까? – alex555

+0

@ alex555 답변이 업데이트되었습니다. –

+1

좋아요! 고맙습니다. – alex555

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 
+0

삽입물에는'@'이 있고'# # '. –

+1

감사합니다. 여러분, 맞습니다. 문제가 해결되었습니다. –

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 

또는는 범위에 표를 넣어 범위 : 시도해보십시오.

DECLARE @sql nvarchar(2000) 

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