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!