ホームページ >データベース >mysql チュートリアル >リストを SQL ストアド プロシージャに効率的に渡すにはどうすればよいですか?

リストを SQL ストアド プロシージャに効率的に渡すにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-01 08:36:10959ブラウズ

How Can I Efficiently Pass a List to a SQL Stored Procedure?

合格リスト SQL ストアド プロシージャへの効率的な変換

従来、複数の項目を SQL ストアド プロシージャに渡すには、面倒な文字列操作と区切り文字で区切られた ID の連結が必要でした。このアプローチは、パフォーマンスと柔軟性の点で最適ではない可能性があります。しかし、SQL Server 2008 の登場により、「テーブル値パラメータ」と呼ばれる新機能が優れたソリューションとして登場しました。

テーブル値パラメータを利用することで、開発者は、テーブル値パラメータを使用してユーザー定義のテーブル型を定義できます。データベースにアクセスし、その型の値のリストを単一のパラメーターとしてストアド プロシージャに渡します。このアプローチにより、手動で文字列を連結する必要がなくなり、いくつかの利点が得られます。

  • パフォーマンスの向上: テーブル値パラメーターにより、データベースはデータ操作をより効率的に処理できるようになり、結果として高速化されます。
  • 簡略化されたコード: コードは、より簡潔で読みやすくなります。複雑な文字列操作操作が必要なくなりました。
  • 柔軟性の向上: テーブル値パラメーターは、より複雑なデータ型をサポートし、ストアド プロシージャ内で追加の処理が可能になりました。

テーブル値パラメータを利用するには、開発者はデータベースにユーザー定義のテーブル型を作成し、この型をパラメータとして受け入れるようにストアド プロシージャを変更する必要があります。以下のコード スニペットは、このアプローチの実装方法を示しています。

C# コード:

public void AddItemsToReport(string connStr, int Id, List<int> itemList)
{
    using (SqlConnection _connection = new SqlConnection(connStr))
    {
        using (SqlCommand _sqlcommand = new SqlCommand("AddItemsToReport", _connection))
        {
            _sqlcommand.CommandType = CommandType.StoredProcedure;

            _sqlcommand.Parameters.AddWithValue("ReportId", Id);
            _sqlcommand.Parameters.AddWithValue("Items", itemList);

            _connection.Open();
            _sqlcommand.ExecuteNonQuery();
        }
    }
}

SQL ストアド プロシージャ:

CREATE PROCEDURE AddItemsToReport (@ReportId int, @Items IntArray)
AS
BEGIN
   -- Insert each item into ReportItem table
   INSERT INTO ReportItem (ReportId, ItemId)
   SELECT @ReportId, Item
   FROM @Items
END

この例では、「IntArray」型は、次のようにマッピングされるユーザー定義のテーブル型です。リスト C#で。 "@Items" パラメーターは項目 ID のリストを単一のエンティティとして受け入れることができるため、パフォーマンスとコードの可読性の両方が向上します。

以上がリストを SQL ストアド プロシージャに効率的に渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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