Heim >Datenbank >MySQL-Tutorial >Wie können Arrays mithilfe von Tabellenwertparametern (TVPs) effizient an gespeicherte Prozeduren übergeben werden?

Wie können Arrays mithilfe von Tabellenwertparametern (TVPs) effizient an gespeicherte Prozeduren übergeben werden?

Linda Hamilton
Linda HamiltonOriginal
2025-01-10 17:23:43886Durchsuche

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

Verwendung von Tabellenwertparametern (TVPs) zur Übergabe von Arrays an gespeicherte Prozeduren

Datenbankanwendungen erfordern häufig die Übergabe von Arrays oder Wertelisten an gespeicherte Prozeduren. Für SQL Server 2008 und höher bieten Table-Valued Parameters (TVPs) die effizienteste Lösung.

Erstellen einer gespeicherten Prozedur mit einem TVP

Dazu gehört zunächst die Definition des TVP-Typs und dann die Erstellung der gespeicherten Prozedur:

<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>

Aufrufen der gespeicherten Prozedur

Bereiten Sie in Ihrer Anwendung (Beispiel mit C#) die Daten als DataTable vor, stellen Sie die Datenbankverbindung her und erstellen Sie das Befehlsobjekt:

<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>

Führen Sie abschließend die gespeicherte Prozedur aus und verarbeiten Sie die Ergebnisse:

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

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

TVPs bieten eine typsichere und effiziente Methode zum Übergeben von Arrays oder Listen an gespeicherte Prozeduren und verbessern so die Leistung und Wartbarkeit von Datenbankanwendungen.

Das obige ist der detaillierte Inhalt vonWie können Arrays mithilfe von Tabellenwertparametern (TVPs) effizient an gespeicherte Prozeduren übergeben werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn