ユーザー定義のテーブル型を使用して文字列のリストを SQL Server ストアド プロシージャに渡す
C# から SQL Server ストアド プロシージャを呼び出す場合、文字列のリストをパラメータとして渡す必要がある場合があります。単純なデータ型を処理するには標準パラメータで十分ですが、リストなどの複雑なデータ構造の場合は、より洗練されたアプローチが必要です。
文字列のリストを渡すには、SQL Server のユーザー定義テーブル タイプ (UDTT) 機能を利用できます。この機能を使用すると、データのコレクションを保存するテーブルをシミュレートするカスタム データ型を作成できます。
ユーザー定義テーブルタイプの作成
まず、ユーザー定義テーブル タイプ (UDTT) を作成する必要があります。
CREATE TYPE [dbo].[StringList] AS TABLE( [Item] [NVARCHAR](MAX) NULL );
この UDTT は、文字列を保持する「Item」という名前の単一の列を定義します。
ストアド プロシージャを変更する
次に、UDTT パラメーターを受け入れるようにストアド プロシージャを変更します。
CREATE PROCEDURE [dbo].[sp_UseStringList] @list StringList READONLY AS BEGIN -- 只返回我们传入的项目 SELECT l.Item FROM @list l; END
C# での UDTT の設定
C# では、DataTable を使用して UDTT を設定します。
using (var table = new DataTable()) { table.Columns.Add("Item", typeof(string)); // ...此处添加循环填充字符串列表到DataTable的代码... SqlParameter pList = new SqlParameter("@list", SqlDbType.Structured); pList.Value = table; }
ストアド プロシージャに UDTT パラメーターを渡します
最後に、UDTT パラメータをストアド プロシージャに渡します。
using (var cmd = new SqlCommand("exec sp_UseStringList @list", con)) { cmd.Parameters.Add(pList); using (var dr = cmd.ExecuteReader()) { while (dr.Read()) Console.WriteLine(dr["Item"].ToString()); } }
このアプローチにより、文字列のリストを SQL Server ストアド プロシージャに効率的に渡すことができます。
以上がユーザー定義のテーブル型を使用して文字列のリストを SQL Server ストアド プロシージャに渡す方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。