sql >> データベース >  >> RDS >> Sqlserver

ストアド プロシージャから一時テーブルに複数の出力を取得する方法

    ストアド プロシージャを変更しないとできません。

    SQL Server では、INSERT...EXEC を使用して、ストアド プロシージャの最初の結果セットのみを別のテーブルに挿入できます。 .列数と位置は正確に一致する必要があり、INSERT...EXEC つまり、proc1 から proc2 のテーブルに挿入してから、proc2 から proc3 のテーブルに挿入することはできません。だから INSERT...EXEC はまったく満足のいく解決策ではありません。

    回避策は、プロシージャを変更して、呼び出しスコープで定義された一時テーブルに結果を挿入することです。例:

    create proc get_some_data as
    insert #temp1 (col1, col2) select col1, col2 from table1
    insert #temp2 (colA, colB) select colA, colB from table2
    go
    create table #temp1 (col1 int, col2 int)
    create table #temp2 (colA int, colB int)
    exec get_some_data
    select * from #temp1
    select * from #temp2
    drop table #temp1
    drop table #temp2
    go
      

    手順を変更できない場合は、不運です。 訂正 :HABO が親切に指摘したように、できます CLR を使用して結果セットを反復処理します。詳細については、以下のリンクを参照してください。自分が何をしているのかを知っていて、他に選択肢がないのであれば、それほど悪くはありません.

    ストアド プロシージャ間でのデータ共有の詳細については、Erland Sommarskog による次の非常に包括的な記事を参照してください。 www.sommarskog.se/share_data.html




    1. チェーンドロップダウンリストにAjaxとJavascriptを入力できません

    2. SQL-結果がない日付の入力

    3. Oracleでテーブルサイズを決定する方法

    4. OracleにSKIPLOCKEDでTOPN行を返すように強制します