Heim >Datenbank >MySQL-Tutorial >Wie können Tabellenwertparameter die Übergabe von Listen an gespeicherte SQL-Prozeduren verbessern?
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:
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!