Ich habe die folgende SQL-Abfrage:SQL Server für jede Schleife
DECLARE @MyVar datetime = '1/1/2010'
SELECT @MyVar
Dieses natürlich gibt '1/1/2010'.
Was ich tun möchte, ist eine Liste der Daten haben, sagen:
1/1/2010
2/1/2010
3/1/2010
4/1/2010
5/1/2010
Dann möchte ich FÜR JEDES durch die Zahlen und die SQL-Abfrage ausführen.
So etwas wie (Pseudo-Code):
List = 1/1/2010,2/1/2010,3/1/2010,4/1/2010,5/1/2010
For each x in List
do
DECLARE @MyVar datetime = x
SELECT @MyVar
zurückkommen würde also: -
1/1/2010 2/1/2010 3/1/2010 4/1/2010 5/1/2010
Ich möchte, dass die Daten als ein Resultset zurückgegeben werden, nicht mehrere Resultsets, so dass ich am Ende der Abfrage möglicherweise eine Art Union verwenden muss, so dass jede Iteration der Schleife auf der nächste .
bearbeiten
Ich habe eine große Abfrage, die eine ‚to date‘ Parameter akzeptiert, muss ich es 24-mal laufen, jedes Mal mit einem bestimmten bisher die ich brauche, um liefern zu können (diese Datumsangaben werden dynamisch sein. Ich möchte vermeiden, meine Abfrage 24 Mal zu wiederholen, wenn die Gewerkschaftsmitglieder sich ihnen anschließen, als ob ich zurückkommen und zusätzliche Spalten hinzufügen müsste, was sehr zeitaufwendig wäre. Hier
Können Sie erklären, warum Sie dies tun müssen? 95% der Zeit, wenn Sie eine Schleifenstruktur in tSQL benötigen, tun Sie es wahrscheinlich falsch. – JohnFx
Warum erstellen Sie keine Tabelle, in der Sie die Daten angeben können, für die Sie sie ausführen möchten. Es gibt fast sicher einen besseren Weg, dies zu tun, als durch fest codierte konstante Werte zu schauen. – JohnFx
Die Daten in Ihrem Beispiel sind sequenziell nach Monat. Ist das eine Regel, oder müssen Sie in der Lage sein, für einen beliebigen Zeitraum zu laufen? Gibt es einen Grund, warum Sie die große Abfrage nicht so bearbeiten können, dass sie einen Datumsbereich oder eine Datumsgruppe anstelle eines einzelnen Datums verwendet? Wenn Sie unbedingt Iterationen durchlaufen müssen (gegen den guten Ratschlag oben), dann sollten Sie einen Cursor in Betracht ziehen. – JAQFrost