ストアドプロシージャの結果をテーブルに挿入する - INSERT INTO & EXEC

ストアドプロシージャの結果をテーブルに挿入する

ストアドプロシージャが返す結果をテーブルに挿入して、他のスクリプトで使いたいような時ありますよね。

ここでは、ストアドプロシージャの結果をテーブルに挿入する方法をご紹介します。


INSERT INTO [テーブル名] EXEC

ストアドプロシージャが返す結果セットのスキーマがわかっている場合は、先にテーブルを作っておくことによって、INSERT INTO & EXEC でそのテーブルに結果を挿入することができます。

例えば次のような、テーブル名を渡すと、カラムを返すストアドプロシージャ uspColumnListGet があります。

CREATE PROCEDURE uspColumnListGet
    @TableName NVARCHAR(128)
AS 
BEGIN

    SElECT      ORDINAL_POSITION,
                COLUMN_NAME,
                DATA_TYPE
    FROM        INFORMATION_SCHEMA.COLUMNS
    WHERE       TABLE_NAME = @TableName
    ORDER BY    ORDINAL_POSITION;

END

ストアドプロシージャの結果をテーブルに挿入する 1

ストアドプロシージャの結果をテーブルに挿入する 2

この uspColumnListGet の実行結果を、#ColumnList という名前のテンポラリーテーブルに挿入するには、次のようにします。

CREATE TABLE #ColumnList (
    ORDINAL_POSITION INT,
    COLUMN_NAME NVARCHAR(128),
    DATA_TYPE NVARCHAR(128)
);


INSERT INTO #ColumnList
    EXEC uspColumnListGet 'Users';


SELECT  *
FROM    #ColumnList;

ストアドプロシージャの結果をテーブルに挿入する 3

まず、#ColumnList という名前のテンポラリーテーブルを作り、INSERT INTO & EXEC で uspColumnListGet の結果をテーブルに挿入しています。

テーブルは、結果セットとスキーマさえあえば、一時的ではないテーブルでも、テーブル変数でも大丈夫です。

ストアドプロシージャを変更して、結果セットにカラムをひとつ追加したりすると、忘れないように INSERT INTO & EXEC のほうのテーブルのスキーマも変更しないと、エラーになりますので気をつけてください。


ストアドプロシージャから返ってくる結果セットのスキーマがわからない場合や、事前にテーブルを生成したくない場合は OPENROWSET を使ってストアドプロシージャの結果からテーブルを生成することもできます。

詳しくはこちらをご覧ください。
ストアドプロシージャの結果からテーブルを生成する

© 2010-2024 SQL Server 入門