9

これは 2 つの部分からなる質問です。

  1. sp1 と sp2 の 2 つのストアド プロシージャがあります。sp1 が一時テーブル #temp を作成してから sp2 を実行すると、ネストされたプロシージャで #temp にアクセスできますか? そうでない場合、別の方法でそれを行うにはどうすればよいですか?

  2. 関数はテーブル型のパラメーターを受け入れることができますか? 試しましたが、SQL Server でエラーが発生しました。なぜこれが機能しないのですか?おそらく、sqlserver は Generic のようなものをサポートする必要があります。

4

4 に答える 4

13
  1. はい、一時テーブルは接続のスコープ内にあるため、ネストされたストアド プロシージャ (sp2) は #temp table create in sp1 にアクセスできます。

  2. はい、SQL 2008 では、関数またはストアド プロシージャへの入力としてテーブル値パラメーター (TVP) を渡すことができます。詳しくはこちらをご覧ください

于 2012-06-20T05:07:14.443 に答える
12

IT WORKS、子プロシージャで一時テーブルにアクセスするには、親で宣言する必要があります。

create proc test2
    As
    BEGIN

        insert into #tmpchild
        select 100

    END

CREATE PROC [dbo].[TEST]
As
BEGIN

    create table #tmpchild(id int)
    exec test2;
    select * FROM #tmpchild;
END

ここで TEST SP を実行すると、 test2 が呼び出され、子 SP で #tempchild にアクセスできます。そして、以下の出力が得られます。

100
于 2016-05-10T15:25:44.327 に答える