46

SQL Server 2000 では、exec を使用してテーブル変数に挿入できないというのは本当ですか?

このスクリプトを試したところ、エラー メッセージが表示されましたEXECUTE cannot be used as a source when inserting into a table variable.

declare @tmp TABLE (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

それが本当なら、私は何をすべきですか?

4

3 に答える 3

75

注意-この質問と回答は、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.

于 2013-01-31T10:13:39.537 に答える
13

ドキュメントは誤解を招くものです。
次のコードを本番環境で実行しています

DECLARE @table TABLE (UserID varchar(100))
DECLARE @sql varchar(1000)
SET @sql = 'spSelUserIDList'
/* Will also work
   SET @sql = 'SELECT UserID FROM UserTable'
*/

INSERT INTO @table
EXEC(@sql)

SELECT * FROM @table
于 2014-03-30T16:29:14.070 に答える
5
DECLARE @q nvarchar(4000)
SET @q = 'DECLARE @tmp TABLE (code VARCHAR(50), mount MONEY)
INSERT INTO @tmp
  (
    code,
    mount
  )
SELECT coa_code,
       amount
FROM   T_Ledger_detail

SELECT *
FROM   @tmp'

EXEC sp_executesql @q

動的クエリで必要な場合

于 2013-01-31T10:06:54.350 に答える