2013-08-29 11 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

:私は2008年のための多くのヒントを発見し、さらにバージョン、2005年

+1

は、2005年からしばらくして、しかし@ TEMPTABLEのスコープが現在の手順、ないは、ExecuteSQL手順に限られている... – Sparky

+2

それはsp_executesqlをとは何の関係もありません。それはテーブル変数のスコープと関係しています。次のことは、一時テーブルを使用することですが、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

のための任意のTEMPTABLEのスコープ@は現在のプロシージャに制限されてきました。

あなたはグローバル一時表(つまり##台)と@tempTableを置き換えますが、そのテーブルの範囲で非常に注意すると、手順が解決

関連する問題