Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Gespeicherte T-SQL-Prozedur, die mehrere ID-Werte akzeptiert

Erland Sommarskog hat die maßgebliche Antwort auf diese Frage in den letzten 16 Jahren aufrechterhalten:Arrays und Listen in SQL Server .

Es gibt mindestens ein Dutzend Möglichkeiten, ein Array oder eine Liste an eine Abfrage zu übergeben; jeder hat seine eigenen einzigartigen Vor- und Nachteile.

  • Tabellenwertparameter. Nur SQL Server 2008 und höher und wahrscheinlich am nächsten an einem universellen "besten" Ansatz.
  • Die iterative Methode. Übergeben Sie eine Zeichenfolge mit Trennzeichen und durchlaufen Sie sie.
  • Verwendung der CLR. SQL Server 2005 und höher nur aus .NET-Sprachen.
  • XML. Sehr gut zum Einfügen vieler Zeilen; kann für SELECTs übertrieben sein.
  • Zahlentabelle. Höhere Leistung/Komplexität als einfache iterative Methode.
  • Elemente fester Länge. Feste Länge verbessert die Geschwindigkeit gegenüber der begrenzten Zeichenfolge
  • Funktion von Zahlen. Variationen von Table of Numbers und fester Länge, bei denen die Zahl in einer Funktion generiert und nicht aus einer Tabelle entnommen wird.
  • Rekursiver gemeinsamer Tabellenausdruck (CTE). SQL Server 2005 und höher, immer noch nicht zu komplex und performanter als iterative Methode.
  • Dynamisches SQL. Kann langsam sein und Auswirkungen auf die Sicherheit haben.
  • Übergeben der Liste mit so vielen Parametern. Mühsam und fehleranfällig, aber einfach.
  • Wirklich langsame Methoden. Methoden, die charindex, patindex oder LIKE verwenden.

Ich kann wirklich nicht genug empfehlen, den Artikel zu lesen, um mehr über die Kompromisse zwischen all diesen Optionen zu erfahren.