Übergeben eines Arrays von Parametern an eine gespeicherte Prozedur
Muss ich übergeben Sie ein array von "id", um eine gespeicherte Prozedur zum löschen aller Zeilen aus der Tabelle mit AUSNAHME der Zeilen, die match id ' s im array.
Wie kann ich es tun, in einer höchst einfachen Art und Weise?
InformationsquelleAutor der Frage markiz | 2009-07-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie eine gespeicherte Prozedur:
EDIT:
Eine Ergänzung für die Liste serialisieren (oder irgendetwas anderes):
Ergebnis (ready to use mit XML-parameter):
ORIGINAL POST:
Übergabe von XML als parameter:
InformationsquelleAutor der Antwort Zanoni
Wenn Sie mit Sql Server 2008-oder besser, die Sie verwenden können, sowas nennt man einen Tabellenwert-Parameter (TVP) statt serialisieren & Deserialisieren von Ihrer Liste Daten jedes mal, wenn Sie wollen, übergeben Sie es an eine gespeicherte Prozedur.
Beginnen wir mit der Erstellung einer einfachen schema zu dienen, wie unser Spielplatz:
Mit unserem schema und Beispieldaten im Ort, sind wir nun bereit, unsere TVP gespeicherte Prozedur:
Mit unseren beiden-schema und API im Ort, den wir nennen können die TVP gespeicherte Prozedur aus unserem Programm zum Beispiel so:
Es ist wahrscheinlich eine weniger schmerzhafte Art und Weise, dies zu tun mit einer abstrakten API, wie das Entity Framework. Allerdings habe ich nicht die Zeit haben, um zu sehen, für mich zu dieser Zeit.
InformationsquelleAutor der Antwort rmiesen
dies ist die beste source:
http://www.sommarskog.se/arrays-in-sql.html
erstellen Sie eine split-Funktion mit dem link, und verwenden Sie es wie:
Ich bevorzuge die Anzahl table-Ansatz
Dies ist der code, basierend auf den oben genannten link, dass sollte es für Sie tun...
Bevor Sie meine Funktion, die Sie benötigen, um eine "Hilfs" - Tabelle, müssen Sie nur tun dies einmal pro Datenbank:
verwenden Sie diese Funktion zum aufteilen der Zeichenfolge, die nicht loop und ist sehr schnell:
Sie können diese Funktion als eine Tabelle in einer join:
hier ist dein löschen:
InformationsquelleAutor der Antwort KM.
Könnten Sie versuchen, diese:
InformationsquelleAutor der Antwort Adriaan Stander
Könnte man eine temp-Tabelle, die die gespeicherte Prozedur erwartet, zu existieren. Dies funktioniert auch auf älteren Versionen von SQL Server, die nicht die Unterstützung von XML etc.
InformationsquelleAutor der Antwort Simon
InformationsquelleAutor der Antwort Vitalivs
Würde ich prüfen, die Weitergabe Ihrer IDs als XML-string, und dann könnte man aufteilen des XML in eine temporäre Tabelle zum join gegen, oder Sie können auch die Abfrage gegen das XML direkt mit SP_XML_PREPAREDOCUMENT und OPENXML.
InformationsquelleAutor der Antwort Scott Ivey
Was über die Verwendung des XML-Datentyps anstatt ein array übergeben. Ich finde, dass ist eine bessere Lösung und funktioniert auch in SQL 2005
InformationsquelleAutor der Antwort Cody C
Ich mag dieses, weil es geeignet ist, die übergeben werden, als ein XElement, das geeignet ist, SqlCommand
(Sorry, es ist VB.NET aber Sie bekommen die Idee)
Dies ist die sql-Gespeicherte Prozedur, gekürzt, nicht komplett!
CREATE PROCEDURE [dbo].[myproc]
(@bla, xml)
ALS
... WO SomeID IN (SELECT doc.t.Wert('.','int") von @netwerkids.Knoten(N'/doc/d') doc(t))
InformationsquelleAutor der Antwort Egbert Nierop
In der SQL Server-2016 können Sie wrap array mit [ ] und übergeben Sie es als JSON-siehe http://blogs.msdn.com/b/sqlserverstorageengine/archive/2015/09/08/passing-arrays-to-t-sql-procedures-as-json.aspx
InformationsquelleAutor der Antwort Jovan MSFT