C# および SQL Server: ストアド プロシージャ内の文字列リストの効率的な処理
C# から SQL Server ストアド プロシージャを操作する際の一般的な課題には、文字列値の動的なリストを渡すことが含まれます。 この記事では、ユーザー定義テーブル タイプ (UDTT) を使用した堅牢なソリューションを示します。
問題: 動的文字列リスト
ストアド プロシージャが文字列の可変長リストに基づいて結果をフィルター処理する必要があると想像してください。 このリストを直接渡すと問題が発生する可能性があります。
解決策: ユーザー定義テーブルタイプ (UDTT)
SQL Server 2008 以降のバージョンでは、洗練されたソリューションとして UDTT が提供されます。 StringList
という名前の UDTT を作成して、文字列コレクションをカプセル化します。
ストアド プロシージャの作成
このストアド プロシージャは StringList
タイプを使用します:
<code class="language-sql">CREATE PROCEDURE [dbo].[sp_UseStringList] @list StringList READONLY AS BEGIN -- Retrieve and return items from the input list SELECT l.Item FROM @list l; END</code>
C# の実装
以下の C# コードは、このストアド プロシージャの利用方法を示しています。
<code class="language-csharp">using (var con = new SqlConnection(connstring)) { con.Open(); using (SqlCommand cmd = new SqlCommand("exec sp_UseStringList @list", con)) { // Create a DataTable to hold the string list using (var table = new DataTable()) { table.Columns.Add("Item", typeof(string)); // Add sample data – replace with your actual list for (int i = 0; i < 10; i++) { table.Rows.Add("String" + i); } // Add the DataTable as a parameter to the command. SqlParameter tvpParam = cmd.Parameters.AddWithValue("@list", table); tvpParam.SqlDbType = SqlDbType.Structured; tvpParam.TypeName = "dbo.StringList"; // Execute the command. using (SqlDataReader reader = cmd.ExecuteReader()) { // Process the results while (reader.Read()) { Console.WriteLine(reader["Item"].ToString()); } } } } }</code>
SSMS の実行例
SQL Server Management Studio (SSMS) でのテストの場合:
<code class="language-sql">DECLARE @list AS StringList; INSERT INTO @list VALUES ('Apple'), ('Banana'), ('Orange'); EXEC sp_UseStringList @list;</code>
このアプローチは、構造化データ転送のための UDTT の機能を利用して、文字列のリストを C# から SQL Server ストアド プロシージャに渡すためのクリーンで効率的な方法を提供します。 "dbo.StringList"
を変更した場合は、必ず正しいスキーマと名前に置き換えてください。
以上がC# から SQL Server ストアド プロシージャに文字列のリストを効率的に渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。