0

一時テーブルを別のストアドプロシージャに返すストアドプロシージャを作成しようとしています。ただし、テーブルを出力変数として設定できないようです。例えば:

   @t table(ID int) output

パラメータが機能しないため。ただし、以下は文句を言いません。

   @t int output

あるストアドプロシージャを取得して、別のストアドプロシージャによって生成されたテーブルを取得する方法はありますか?よろしくお願いします!

4

2 に答える 2

0

はい、これはユーザー定義のテーブルタイプを使用して実現できます。あなたがする必要があるのは

  1. ユーザー定義のテーブルタイプを作成します。
  2. テーブルタイプ変数を受け入れる最初のストアドプロシージャを作成します。
  3. 2番目のプロシージャでテーブルタイプ変数を宣言し、必要なデータを入力して、テーブルタイプ変数を渡して最初のプロシージャを呼び出します。

これがサンプルコードです。

1)ユーザー定義テーブルタイプを作成します。[プログラマビリティ]->[タイプ]->[ユーザー定義のテーブルタイプ]->右クリックしてテーブルタイプを作成します

CREATE TYPE [schemaname].[Ttype] AS TABLE 
(
    EmployeeID int,
    EmployeeName varchar(100),
)
GO

上記のタイプは単なる例であり、必要な列に入力してください。ここで、TtypeはTableTypeの名前です(都合に合わせて名前を付けることができます)

2)テーブルタイプを変数として受け入れる最初のストアドプロシージャを作成して、使用できるようにします。

CREATE PROCEDURE [schemaname].[StoredProcName]
@TableType Ttype READONLY
AS
BEGIN
     -- Just an example on how to use the TableType.

    INSERT INTO TableName(EmployeeId,EmployeeName)
    SELECT EmployeeID,EmployeeName FROM @TableType

END
GO

上記のストアドプロシージャは、テーブルタイプ変数を受け入れます。Ttypeは、@Tabletype変数がユーザー定義のテーブルタイプであることを示します。READONLYは、テーブルタイプパラメータに対してDML操作を実行できないことを示します。

3)次に、作成した上記のプロシージャにテーブルタイプパラメータを渡す2番目のプロシージャを作成します。

CREATE PROCEDURE [schemaname].[StoredProc2Name]

AS
BEGIN

    SET NOCOUNT ON;

    DECLARE @Table as Ttype 

    INSERT INTO @Table(EmployeeID,EmployeeName)
    SELECT EmployeeID,EmployeeName FROM schemaname.Employees

    EXEC [schemaname].[StoredProcName] @Table


END
GO

上記のSPでは、テーブルタイプ(Ttype)の@Tableという名前の変数を宣言します。次に、必要なデータを入力し、@Table変数を渡して最初のプロシージャを呼び出します。

于 2012-10-01T20:05:35.930 に答える
0

答えはノーだ。

Stored Procedure作成されたテーブルの名前をあるテーブルから別のテーブルに渡すことができ、次にSPその名前を使用してテーブルを介してクエリを実行できます。

于 2012-10-01T16:04:36.653 に答える