Array-artigen Zugriff auf Variablen in T-SQL
In meinem gespeicherte Prozedur habe ich mehrere ähnliche Variablen @V1
, @V2
... @V20
(sagen wir 20) HOLTE aus einem Datensatz. Wie würde ich dynamisches SQL verwenden zu 20 Anrufe an eine andere gespeicherte Prozedur mit Variablen als Parameter?
Natürlich @V[i]
syntax falsch ist, aber es drückt die Absicht
fetch next from maincursor into @status, @V1, @V2, ...
while @i<21
begin
-- ??? execute sp_executesql 'SecondSP', '@myParam int', @myParam=@V[i]
-- or
-- ??? execute SecondSP @V[i]
set @i = @i+1
end
- Ein bisschen Kontext wäre gut. Warum sind Sie versuchen, dies zu tun?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie schon andere gesagt haben, richten Sie eine temporäre Tabelle, legen Sie die Werte, die Sie benötigen, hinein. Dann "Durchlaufen" durch die Durchführung der erforderlichen SQL aus diesen Werten. Dies wird es ermöglichen, dass Sie 0, um VIELE Werte ausgeführt werden, so dass Sie nicht haben, um set-up eine variable für jede.
Die folgenden ist ein vollständiges Beispiel, wie Sie gehen können, zu tun, ohne Cursor.
Verwenden Sie einen #TempTable
wenn Sie in SQL Server 2005 erstellen Sie eine #TempTable in der übergeordneten gespeicherte Prozedur, und es ist im Kind gespeicherte Prozedur, die es fordert.
in den anderen Verfahren, haben Sie Zugriff auf #TempTable select, löschen, etc...
machen Sie dieses untergeordnete Verfahren arbeiten auf Daten, die nicht auf ein element in einer Zeit,
erinnern, in SQL, Schleifen, saugen, Leistung Weg!
Warum nicht einfach die Tabelle variable anstelle, und dann einfach in einer Schleife durch die Tabelle bekommen, jeden Wert.
Grundsätzlich behandeln jede Zeile in einer Tabelle als array-Zelle, mit einer Tabelle, die eine Spalte.
Nur ein Gedanke. 🙂
Dies scheint wie eine seltsame Anfrage - Sie haben immer einen festen Satz von Variablen? Was ist, wenn die Zahl ändert sich von 20 auf 21, und so weiter, Sie sind ständig zu haben, um die Deklaration der neuen Variablen?
Ist es möglich, anstatt das abrufen der Werte in einzelne Variablen, um Sie wieder jeweils als einzelne Zeilen und nur eine Schleife in einem cursor?
Wenn nicht, und Sie haben, um die einzelnen Variablen erläutert werden, hier ist eine Lösung:
Ich weiß nicht wirklich, wie diese Lösung, es scheint chaotisch und zu entwickeln. Auch, als eine Randnotiz - so, wie Sie formuliert Ihre Frage scheint zu Fragen, ob es sind arrays in T-SQL. Standardmäßig gibt es nicht, obwohl eine schnelle Suche auf google können zeigen Sie in die Richtung von Problemumgehungen für diese, wenn Sie absolut brauchen.