ホームページ >データベース >mysql チュートリアル >複数の項目を SQL ストアド プロシージャに渡すときに、テーブル値パラメーターを使用して効率をどのように向上させることができますか?

複数の項目を SQL ストアド プロシージャに渡すときに、テーブル値パラメーターを使用して効率をどのように向上させることができますか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-30 04:48:39234ブラウズ

How Can Table-Valued Parameters Improve Efficiency When Passing Multiple Items to SQL Stored Procedures?

テーブル値パラメーターを使用したスト​​アド プロシージャの操作

問題:
複数のアイテムを単一のデータベース レコードに効率的に転送することは、依然として永続的な課題です。たとえば、複数のアイテムをレポートに割り当てるには、複数のレコードで 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。