.net to sql server:ストアドプロシージャテーブルパラメーターの最適化
SQL Server 2008へのデータベースの移行には、効率的なデータ転送のためのストアドプロシージャ内でテーブル値のパラメーターを活用する必要があります。 このアプローチは、現在時代遅れと見なされているコンマ分離された文字列のような古い方法でのパフォーマンスを大幅に向上させます。 この記事では、.NETコードで、
、またはを使用して、データをストアドプロシージャに効果的に渡す方法を示しています。 次の例では、DataTable
とDbDataReader
:IEnumerable<SqlDataRecord>
の使用を紹介しています。
DataTable
IEnumerable<SqlDataRecord>
<code class="language-csharp">using System.Data; using System.Data.SqlClient; public class StoredProcedureParameters { public static void ExecuteProcedure(bool useDataTable, string connectionString, IEnumerable<long> ids) { using (var connection = new SqlConnection(connectionString)) { connection.Open(); using (var command = connection.CreateCommand()) { command.CommandText = "dbo.procMergePageView"; command.CommandType = CommandType.StoredProcedure; SqlParameter parameter; if (useDataTable) { parameter = command.Parameters.AddWithValue("@Display", CreateDataTable(ids)); } else { parameter = command.Parameters.AddWithValue("@Display", CreateSqlDataRecords(ids)); } parameter.SqlDbType = SqlDbType.Structured; parameter.TypeName = "dbo.PageViewTableType"; command.ExecuteNonQuery(); } } } private static DataTable CreateDataTable(IEnumerable<long> ids) { var table = new DataTable(); table.Columns.Add("ID", typeof(long)); foreach (var id in ids) { table.Rows.Add(id); } return table; } private static IEnumerable<SqlDataRecord> CreateSqlDataRecords(IEnumerable<long> ids) { var metaData = new SqlMetaData[1]; metaData[0] = new SqlMetaData("ID", SqlDbType.BigInt); var record = new SqlDataRecord(metaData); foreach (var id in ids) { record.SetInt64(0, id); yield return record; } } }</code>
をSqlDbType
にマッピングして、ストアドプロシージャで定義されている対応するテーブルタイプ(この例ではStructured
)に設定することにより、シームレスで最適化されたデータ送信を確保します。 この方法は、.NETアプリケーションとSQLサーバーのストアドプロシージャとの間の効率的で信頼できる通信を保証します。
以上が.NETからテーブル値パラメーターをSQL Serverストアドプロシージャに効率的に渡す方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。