ホームページ >データベース >mysql チュートリアル >複数の項目を SQL ストアド プロシージャに渡すときに、テーブル値パラメーターを使用して効率をどのように向上させることができますか?
問題:
複数のアイテムを単一のデータベース レコードに効率的に転送することは、依然として永続的な課題です。たとえば、複数のアイテムをレポートに割り当てるには、複数のレコードで ReportItems テーブルを更新する必要があります。従来のアプローチには、複雑なコードと、項目リストを文字列として処理するための補助関数が含まれていました。
SQL Server 2008 の出現により、「テーブル値パラメーター」が導入されました。この難問に対する画期的な解決策です。
の魔法TVP:
テーブル値パラメーターを使用すると、テーブルのような構造をパラメーターとしてストアド プロシージャに渡すことができます。この例では、整数項目 ID のテーブルを受け入れるように TVP を定義できます。
改訂されたコード:
改訂されたコードはより簡潔になりました:
public void AddItemsToReport(string connStr, int Id, List<int> itemList) { Database db = DatabaseFactory.CreateDatabase(connStr); string sqlCommand = "AddItemsToReport" DbCommand dbCommand = db.GetStoredProcCommand(sqlCommand); // Convert the list to a DataTable (lightweight) DataTable table = itemList.ToDataTable(); // Create the TVP parameter db.AddParameter(dbCommand, "Items", table); // Execute the stored procedure db.ExecuteNonQuery(dbCommand); }
拡張ストアド プロシージャ:
ストアド プロシージャさらに単純化します:
INSERT INTO ReportItem (ReportId,ItemId) SELECT @ReportId, Id FROM @Items
結論:
テーブル値パラメーターは、複数の項目を SQL ストアド プロシージャに転送するための洗練された効率的なメカニズムを提供します。 TVP は複雑な文字列操作や補助関数の必要性を排除することで、開発プロセスを合理化し、コードの可読性を高めます。
以上が複数の項目を SQL ストアド プロシージャに渡すときに、テーブル値パラメーターを使用して効率をどのように向上させることができますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。