次のように、いくつかのリスト(約20000 ID)をストアドプロシージャに送信する必要があります。
1391924, 6546510, 7419635, 6599910, 6546888, 1116510, 6546720, ...
私はこのデータを持っていますList<int>
このリストをストアドプロシージャに送信するにはどうすればよいですか?
次に、IDのリストを一時テーブルに挿入する必要があります
次のように、いくつかのリスト(約20000 ID)をストアドプロシージャに送信する必要があります。
1391924, 6546510, 7419635, 6599910, 6546888, 1116510, 6546720, ...
私はこのデータを持っていますList<int>
このリストをストアドプロシージャに送信するにはどうすればよいですか?
次に、IDのリストを一時テーブルに挿入する必要があります
以下を使用できます。テーブル値パラメーター
テーブル値パラメーターは、SQL Server 2008 の新しいパラメーターの型です。テーブル値パラメーターは、ユーザー定義のテーブル型を使用して宣言されます。テーブル値パラメーターを使用すると、一時テーブルや多数のパラメーターを作成することなく、複数行のデータを Transact-SQL ステートメントまたはルーチン (ストアド プロシージャや関数など) に送信できます。
テーブル値パラメーターは、OLE DB および ODBC のパラメーター配列に似ていますが、より柔軟で、Transact-SQL との緊密な統合を提供します。テーブル値パラメーターには、セットベースの操作に参加できるという利点もあります。
例えば。:
SQLサーバー:
テーブル値パラメーターを作成します。
CREATE TYPE IDsTableType AS TABLE
(
[Product] [varchar](10) NOT NULL
)
それをストアド プロシージャに渡します。
CREATE PROCEDURE GetIDs
(
@TableVariable IDsTableType READONLY
)
AS
BEGIN
//Do Something
END
GO
テーブル値パラメーターをストアド プロシージャに渡すための C# コード:
DataTable dataTable = GetData();
// Configure the SqlCommand and SqlParameter.
SqlCommand cmd= new SqlCommand(
"GetIDs", connection);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter tvpParam = cmd.Parameters.AddWithValue(
"@TableVariable", dataTable);
tvpParam.SqlDbType = SqlDbType.Structured;
配列を DataTable に書き込むと、DataTable をデータベースに一括挿入できます。その後、ストアド プロシージャはそのテーブルから読み取ることができます。