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

SQL-Optimierung:XML oder Zeichenfolge mit Trennzeichen

Es gibt jetzt eine vierte Option - table valued parameters , wobei Sie tatsächlich eine Wertetabelle als Parameter an einen Sproc übergeben und diese dann wie eine normale Tabellenvariable verwenden können. Ich würde diesen Ansatz dem XML- (oder CSV-Parsing-Ansatz) vorziehen

Ich kann keine Leistungszahlen zwischen all den verschiedenen Ansätzen zitieren, aber das ist einer, den ich versuchen würde - ich würde empfehlen, einige echte Leistungstests mit ihnen durchzuführen.

Bearbeiten:
Ein bisschen mehr über TVPs. Um die Werte an Ihren Sproc zu übergeben, definieren Sie einfach einen SqlParameter (SqlDbType.Structured) – der Wert davon kann auf jede IEnumerable-, DataTable- oder DbDataReader-Quelle gesetzt werden. Vermutlich haben Sie also bereits die Werteliste in einer Art Liste/Array - Sie müssen nichts tun, um sie in XML oder CSV umzuwandeln.

Ich denke, dies macht den Sproc auch klarer, einfacher und wartungsfreundlicher und bietet einen natürlicheren Weg, um das Endergebnis zu erzielen. Einer der Hauptpunkte ist, dass SQL am besten bei satzbasierten Aktivitäten/nicht Schleifen/Nicht-String-Manipulationen abschneidet.

Das heißt nicht, dass es mit einer großen Menge an übergebenen Werten gut funktioniert. Aber mit kleineren Mengen (bis zu ~1000) sollte es in Ordnung sein.