一時テーブルを別のストアドプロシージャに返すストアドプロシージャを作成しようとしています。ただし、テーブルを出力変数として設定できないようです。例えば:
@t table(ID int) output
パラメータが機能しないため。ただし、以下は文句を言いません。
@t int output
あるストアドプロシージャを取得して、別のストアドプロシージャによって生成されたテーブルを取得する方法はありますか?よろしくお願いします!
一時テーブルを別のストアドプロシージャに返すストアドプロシージャを作成しようとしています。ただし、テーブルを出力変数として設定できないようです。例えば:
@t table(ID int) output
パラメータが機能しないため。ただし、以下は文句を言いません。
@t int output
あるストアドプロシージャを取得して、別のストアドプロシージャによって生成されたテーブルを取得する方法はありますか?よろしくお願いします!
はい、これはユーザー定義のテーブルタイプを使用して実現できます。あなたがする必要があるのは
これがサンプルコードです。
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変数を渡して最初のプロシージャを呼び出します。
答えはノーだ。
Stored Procedure
作成されたテーブルの名前をあるテーブルから別のテーブルに渡すことができ、次にSP
その名前を使用してテーブルを介してクエリを実行できます。