N.B。 -この質問と回答は、2000バージョンのSQLServerに関連しています。それ以降のバージョンでは、INSERT INTO @table_variable ... EXEC ...
の制限 解除されたため、それ以降のバージョンには適用されません。
一時テーブルに切り替える必要があります:
CREATE TABLE #tmp (code varchar(50), mount money)
DECLARE @q nvarchar(4000)
SET @q = 'SELECT coa_code, amount FROM T_Ledger_detail'
INSERT INTO #tmp (code, mount)
EXEC sp_executesql (@q)
SELECT * from #tmp
ドキュメントから:
テーブル変数はローカル変数のように動作します。明確に定義されたスコープがあります。これは、関数、ストアドプロシージャ、または宣言されたバッチです。
その範囲内で、テーブル変数は通常のテーブルのように使用できます。これは、SELECT、INSERT、UPDATE、およびDELETEステートメントでテーブルまたはテーブル式が使用されている場所であればどこにでも適用できます。ただし、次のステートメントではテーブルを使用できません。
INSERT INTO table_variable EXEC stored_procedure
SELECT select_list INTO table_variable statements.