2013-08-29 2 views
5

SQL Server 2005에서 저장 프로 시저를 작성하고 있습니다. 특정 시점에 다른 저장 프로 시저를 실행해야합니다. 이 호출은 동적이며, 그래서 난 평소와 같이 sp_executesql을 명령을 사용했습니다 :sp_executesql 및 테이블 출력

DECLARE @DBName varchar(255) 
DECLARE @q varchar(max) 
DECLARE @tempTable table(myParam1 int, -- other params) 

SET @DBName = 'my_db_name' 
SET q = 'insert into @tempTable exec ['[email protected]+'].[dbo].[my_procedure]' 
EXEC sp_executesql @q, '@tempTable table OUTPUT', @tempTable OUTPUT 

SELECT * FROM @tempTable 

그러나 나는이 오류를 얻을 : 당신이 그 변수가 선언되어 볼 수 있듯이

Must declare the scalar variable "@tempTable".

합니다. 나는 documentation을 읽고 text, ntext 및 image 만 허용되는 것으로 보입니다. 어떻게하면 좋을까요?

PS : TEMPTABLE의 범위가 현재 프로 시저로 제한됩니다 @ I는 2005 년

+1

오신 적이 2005 년 이후 잠시지만, @의 TEMPTABLE의 범위는 sp_executesql을 함께 할 아무것도하지 않는 현재 프로 시저가 아닌 executeSQL 절차 ... – Sparky

+2

로 제한됩니다. 그것은 테이블 변수의 범위와 관련이 있습니다. 다음 일은 임시 테이블을 사용하는 것이지만 sp_executesql이 다른 스레드에서 실행되기 때문에 실패 할 것이라고 확신합니다. –

답변

4

해결 끝날 때, 덕분에 드롭해야 할 수 팁에 대한 모든 :

DECLARE @DBName varchar(255) 
DECLARE @q varchar(max) 
CREATE table #tempTable(myParam1 int, -- other params) 

SET @DBName = 'my_db_name' 
SET @q = 'insert into #tempTable exec ['[email protected]+'].[dbo].[my_procedure]' 
EXEC(@q) 

SELECT * FROM #tempTable 
drop table #tempTable 
+2

2008 년 저를 위해 작동하지 않습니다! #tempTable은 'EXEC()'의 로컬 범위에서 업데이트되지 않습니다. – Campbeln

1

2008 추가 버전, 어떤 많은 팁을 발견했습니다.

당신은 전역 임시 테이블 (즉, ## 표)로 @tempTable을 대체하지만, 해당 테이블의 범위를 매우주의 및 절차가