2016-06-19 23 views
1

auf Looping Ich habe einige varchar Variablen wie folgt aus:Wie Variable verwenden in SQL Server

@var1='data a', 
@var2='data b', 
@var3='data c', 
..., 
@varn='data n' 

Ich möchte auf Looping Skript diese Variable einfügen.

DECLARE @counter INT 
SET @counter = 1 

WHILE(@counter <= n) 
BEGIN 
    UPDATE [table] 
    SET [header] 
    WHERE data = [@var1-n] 

    SET @counter = @counter + 1 
END 
GO 

Wie @ var1 machen - @varn mit Schleife auf verwenden können [@ var1-n]?

+2

Der Code in Ihrer Frage kann nicht ausgeführt werden. Wofür setzen Sie den Spaltenwert 'Header'? Außerdem funktioniert Sql am besten bei Set-Based-Operationen. Schleifen sollten nach Möglichkeit vermieden werden. Bitte bearbeiten Sie Ihre Frage, um eine [mcve] zu erstellen, damit sie richtig beantwortet werden kann. –

Antwort

0

Die einfachste und die meisten „relational“ Weg, um die Werkzeuge zu benutzen, würden Sie in einer relationalen Datenbank zur Verfügung haben - Tabellen.

Setzen Sie Ihre neuen Werte in eine Tabelle (kann eine Tabellenvariable sein), und aktualisieren Sie dann Ihre Basistabelle mit einer einzelnen, setbasierten-Anweisung.

Etwas wie folgt aus:

-- declare the table to hold the keys and new values 
DECLARE @NewValues TABLE (Data VARCHAR(20), NewHeader VARCHAR(50)) 

-- insert new data into this table variable instead of having n separate variables 
INSERT INTO @NewValues (Data, NewHeader) 
VALUES ('data a', 'New Header a'), ('data b', 'New Header b'), 
     ....., ('data n', 'New Header n'); 

-- update your base table in a SINGLE set-based statement 
UPDATE dbo.YourBaseTable 
SET Header = nv.NewHeader 
FROM @NewValues nv 
WHERE dbo.YourBaseTable.Data = nv.Data 

Eine nette einfache Aussage, kann eine beliebige Anzahl von Zeilen in der Tabelle @NewValues Variable behandeln .....

+1

Ich denke, das ist was ich brauche. Ich habe es versucht, und es hat funktioniert. Danke vielmals. –

0

Es gibt keine native Methode zur dynamischen Auswahl einer Variablen. Sie müssten entweder eine hässliche Case-Anweisung, dynamisches SQL usw. erstellen, aber vielleicht wäre die eleganteste Methode, die Variablen in einer Tabelle zwischenzuspeichern und dann wären Sie in der Lage, Daten basierend auf der Iteration dynamisch auszuwählen fordert auf. Außerdem gibt es wahrscheinlich eine Möglichkeit, Ihr Problem zu lösen, ohne eine While-Schleife auszuführen und es zu einer Set-basierten Operation zu machen.

+0

Gibt es eine andere Möglichkeit, "Daten 1" - "Daten n" in die Schleife einzugeben? danke! –

+0

Sie können einige dynamische SQL-Zauber verwenden, wenn Sie es wirklich tun wollten, aber das würde wirklich widerlich aussehen. Sie sollten versuchen, es zu schreiben, ohne eine Schleife zu verwenden und eine Set-basierte Operation zu verwenden. – Yobik

Verwandte Themen