Heim >Datenbank >MySQL-Tutorial >Wie können Tabellenwertparameter die Übergabe von Listen an gespeicherte SQL-Prozeduren verbessern?

Wie können Tabellenwertparameter die Übergabe von Listen an gespeicherte SQL-Prozeduren verbessern?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-01 11:39:11166Durchsuche

How Can Table-Valued Parameters Improve Passing Lists to SQL Stored Procedures?

Bestehensliste<> zur gespeicherten SQL-Prozedur: Ein besserer Ansatz

Wie so oft kann das Laden mehrerer Elemente in einen bestimmten Datenbankeintrag eine Herausforderung darstellen. Stellen Sie sich ein Szenario vor, in dem Benutzer auf einer Webseite Elemente für einen Bericht auswählen können und diese Elemente Datensätzen in einer Datenbank entsprechen (Berichts- bzw. Elementtabellen). Bei der Übermittlung wird die Datenbank mit den ausgewählten Elementen aktualisiert, die der ReportItems-Tabelle (ReportId, ItemId) hinzugefügt werden.

Traditionell erfordert dies einen SQL-Befehl und eine gespeicherte Prozedur. Die Einführung von Tabellenwertparametern (TVPs) in SQL Server 2008 bietet jedoch eine bessere Lösung.

Tabellenwertparameter

TVPs ermöglichen die Übergabe einer Liste von Elementen in eine gespeicherte Prozedur als einzelnen Datensatz übertragen, wodurch die Notwendigkeit einer Zeichenfolgenverkettung und wiederholter Parametereinfügungen entfällt. Stattdessen wird das TVP als Tabellentyp definiert und in der gespeicherten Prozedur empfangen.

Code-Implementierung

In Ihrem Code kann die AddItemsToReport-Methode so geändert werden, dass sie a verwendet TVP wie folgt:

public void AddItemsToReport(string connStr, int Id, List<int> itemList)
{
    Database db = DatabaseFactory.CreateDatabase(connStr);

    string sqlCommand = "AddItemsToReport";
    DbCommand dbCommand = db.GetStoredProcCommand(sqlCommand);

    // Create TVP DataTable
    DataTable itemTable = new DataTable("Items");
    itemTable.Columns.Add("ItemId", typeof(int));

    // Fill TVP DataTable
    foreach (int item in itemList)
        itemTable.Rows.Add(item);

    // Add TVP parameter
    db.AddParameter(dbCommand, "Items", DbType.Object, itemTable);
    db.ExecuteNonQuery(dbCommand);
}

Im gespeicherten Verfahren:

INSERT INTO ReportItem (ReportId, ItemId)
SELECT  ReportId,
          ItemId
FROM     @Items

Vorteile

TVPs bieten mehrere Vorteile gegenüber dem vorherigen Ansatz:

  • Vereinfacht und rationalisiert den Code
  • Verbessert die Leistung durch Reduzierung des Parametereinfügungsaufwands
  • Verbessert die Datenintegrität durch Sicherstellung der Elemente in der Liste sind vom richtigen Typ

Kompatibilitätsüberlegungen

Beachten Sie, dass die TVP-Unterstützung in SQL Server 2008 auf diese Version und höher beschränkt ist. Wenn Sie mit früheren Versionen von SQL Server arbeiten, müssen möglicherweise alternative Lösungen wie XML-Parameter oder benutzerdefinierte Funktionen in Betracht gezogen werden.

Das obige ist der detaillierte Inhalt vonWie können Tabellenwertparameter die Übergabe von Listen an gespeicherte SQL-Prozeduren verbessern?. 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