首頁 > 資料庫 > mysql教程 > 如何使用表值參數 (TVP) 有效地將陣列傳遞給預存程序?

如何使用表值參數 (TVP) 有效地將陣列傳遞給預存程序?

Linda Hamilton
發布: 2025-01-10 17:23:43
原創
825 人瀏覽過

Efficiently Passing Arrays to Stored Procedures Using Table-Valued Parameters (TVPs)

使用表值參數 (TVP) 將陣列傳遞給預存程序

資料庫應用程式經常需要將陣列或值清單傳遞給預存程序。 對於 SQL Server 2008 及更高版本,表值參數 (TVP) 提供最有效的解決方案。

使用 TVP 建立預存程序

這涉及首先定義 TVP 類型,然後建立預存程序:

<code class="language-sql">CREATE TYPE T1Ids AS Table (
    t1Id INT
);

CREATE PROCEDURE dbo.FindMatchingRowsInTable1 (@Table1Ids AS T1Ids READONLY)
AS
BEGIN
    SET NOCOUNT ON;

    SELECT Table1.t1Id 
    FROM dbo.Table1 AS Table1
    JOIN @Table1Ids AS paramTable1Ids ON Table1.t1Id = paramTable1Ids.t1Id;
END</code>
登入後複製

呼叫預存程序

在您的應用程式中(使用 C# 的範例),將資料準備為 DataTable,建立資料庫連接,並建立命令物件:

<code class="language-csharp">DataTable t1Ids = new DataTable();
t1Ids.Columns.Add("t1Id", typeof(int));

int[] listOfIdsToFind = new[] { 1, 5, 9 };
foreach (int id in listOfIdsToFind)
{
    t1Ids.Rows.Add(id);
}

SqlConnection testbedConnection = new SqlConnection(
    @"Data Source=.\SQLExpress;Initial Catalog=TestbedDb;Persist Security Info=True;User ID=testbedUser;Password=letmein12;Connect Timeout=5");

SqlCommand findMatchingRowsInTable1 = new SqlCommand("dbo.FindMatchingRowsInTable1", testbedConnection);
findMatchingRowsInTable1.CommandType = CommandType.StoredProcedure;

SqlParameter sqlParameter = new SqlParameter("Table1Ids", t1Ids);
findMatchingRowsInTable1.Parameters.Add(sqlParameter);</code>
登入後複製

最後執行預存程序並處理結果:

<code class="language-csharp">SqlDataReader sqlDataReader = findMatchingRowsInTable1.ExecuteReader();

while (sqlDataReader.Read())
{
    Console.WriteLine("Matching t1ID: {0}", sqlDataReader["t1Id"]);
}</code>
登入後複製

TVP 提供了一種類型安全且高效的方法,用於將陣列或清單傳遞給預存程序,從而提高資料庫應用程式的效能和可維護性。

以上是如何使用表值參數 (TVP) 有效地將陣列傳遞給預存程序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板