Gibt es eine Möglichkeit zur Verwendung von Parametern in einer SQL Server-cursor?
Habe ich eine Eltern-Kind-Beziehung in der Datenbank. Was ich tun müssen, ist, eine Schleife durch die übergeordnete Abfrage, und mit dem übergeordneten primären Schlüssel, bekam seine Kinder. Das Problem, das ich habe ist, dass ich einen parametrisierten cursor (pass im Schlüssel), dies zu tun.
Ist es so eine Sache, die in SQL Server oder einem trick zu imitieren, diese? Ich habe versucht zu tun, aber es hat nicht funktioniert:
DECLARE @value VARCHAR(20);
DECLARE @someKey NUMERIC(19,0);
DECLARE main_curs
CURSOR FOR SELECT value FROM someTable where key = @someKey;
SET @someKey = 12345;
OPEN main_curs
FETCH NEXT FROM main_curs INTO @value;
CLOSE main_curs
DEALLOCATE main_curs
Aber es scheint, dass es nicht abholen mir die Einstellung der @someKey.
Jede Hilfe auf diesem würde sehr geschätzt werden. Danke!
UPDATE
Sollte ich mehr Informationen, als ich auf das Beispiel zu einfach scheinen. Ich habe mehrere @someKey Werte, die ich verwenden müssen. Wie bereits erwähnt, habe ich einen Eltern-Kind-Beziehung und ich kann bis zu 6 Kinder. Also ich bin immer eine Liste der Eltern und die entsprechenden Spalten ein und Durchlaufen es. Während in der WHILE-SCHLEIFE, wollte ich den Primärschlüssel aus dem parent-und rufen Sie einen anderen cursor, um die untergeordneten Informationen (verschiedene Spalten zurückgegeben). Also ich würde mehrere Aufrufe der child cursor mit verschiedenen @someKey Werte gesetzt. Hoffe das macht Sinn.
- Kann dir nur die Abfrage der Daten und nicht eine select-dieser ist in der Regel effizienter?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eine Sache, die Sie könnten versuchen, ist mit geschachtelte Cursorn. Ein Beispiel dafür ist auf der Unterseite der Seite mit dem Titel: Mit verschachtelten Cursorn zum erstellen von berichten.
Was Sie brauchen, ist 2-Cursor - eins für das Elternteil und eines für das Kind .Stellen Sie sicher, dass das Kind cursor DEKLARIERT wird innerhalb der SCHLEIFE nicht heraus.es wird nicht funktionieren, wenn Sie erklären, außerhalb.
zB :
Hier ist, wie können Sie deklarieren Sie einen cursor mit dynamischem SQL mit dem 'EXEC ()' - Funktion. Überraschend das funktioniert. Zum Beispiel:
müssen Sie
@someKey = 12345;
vor der Cursor-Deklaration wie:Scheinen Sie zu haben, die Ordnung der Dinge falsch, und Sie sind nicht wirklich etwas zu tun im inneren der cursor?
Wenn Sie möchten, Durchlaufen Sie eine rekursive Hierarchie verwenden, die Allgemeine Tabellenausdrücke finden Sie Rekursive Abfragen Mithilfe Von Allgemeinen Tabellenausdrücken. Sie können erklären Sie Ihren cursor über den rekursiven Allgemeinen Tabellenausdruck, zB:
Aber die meisten oft die rekursive Allgemeine Tabellenausdrücke können, vollständig zu eliminieren die Notwendigkeit für einen cursor.
In einem anderen Ort, jemand schlug die Verwendung einer gespeicherten Prozedur (kompilierte SQL eher als ein ad-hoc-script), aber das funktioniert auch nicht. Hier ist ein weiterer MWE, die zeigt, dass das Problem ziemlich eindeutig:
Scheint es, dass die variable (und dessen Wert zu der Zeit) bekommt gebunden der "declare cursor ..." anstelle der open-cursor.