T-SQL Cursor Ergebnisse in eine Varibale
Hi,
ich hab hier den SQL Server 2008 R2. Ich möchte ganz gern kopierte aber noch leere Tabellen mit Inhalt füllen über den Insert Befehl.
Jetzt kann man ja nicht einfach den Stern Operator benutzen auch wenn die Spalten Namentlich und vom Datentyp her identisch sind zwischen der Kopie und dem Orginal. Um mir nun die ganze Schreiberei etwas zu vereinfachen dachte ich, das ich mittels:
SELECT column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME ='tab_name'
Die Tabellenspaltennamen in eine Variable zu überführen und die in das Insert Statement zu setzen.
Jetzt dachte ich weiter, ich lese die Spaltennamen zeilenweise aus und hänge die an eine Variable. Damit sowas geht hab ich die Curser Funktion gefunden:
DECLARE @var varchar(max)
DECLARE var_Cursor CURSOR FOR
SELECT column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME ='tab_name'
OPEN var_Cursor;
FETCH NEXT FROM var_Cursor;
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM var_Cursor;
END;
CLOSE var_Cursor;
DEALLOCATE var_Cursor;
GO
Die Anweisung erzeugt dann als Ausgabe die Spaltenanmen der Tabelle. Jedoch ist es mir bisher nicht gelungen das Teilergebnis pro Durchlauf an eine Variable zu binden.
Viell. ist das auch total trivial aber ich seh die Lösung nicht.
Grüße
ich hab hier den SQL Server 2008 R2. Ich möchte ganz gern kopierte aber noch leere Tabellen mit Inhalt füllen über den Insert Befehl.
Jetzt kann man ja nicht einfach den Stern Operator benutzen auch wenn die Spalten Namentlich und vom Datentyp her identisch sind zwischen der Kopie und dem Orginal. Um mir nun die ganze Schreiberei etwas zu vereinfachen dachte ich, das ich mittels:
SELECT column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME ='tab_name'
Die Tabellenspaltennamen in eine Variable zu überführen und die in das Insert Statement zu setzen.
Jetzt dachte ich weiter, ich lese die Spaltennamen zeilenweise aus und hänge die an eine Variable. Damit sowas geht hab ich die Curser Funktion gefunden:
DECLARE @var varchar(max)
DECLARE var_Cursor CURSOR FOR
SELECT column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME ='tab_name'
OPEN var_Cursor;
FETCH NEXT FROM var_Cursor;
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM var_Cursor;
END;
CLOSE var_Cursor;
DEALLOCATE var_Cursor;
GO
Die Anweisung erzeugt dann als Ausgabe die Spaltenanmen der Tabelle. Jedoch ist es mir bisher nicht gelungen das Teilergebnis pro Durchlauf an eine Variable zu binden.
Viell. ist das auch total trivial aber ich seh die Lösung nicht.
Grüße
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 193565
Url: https://administrator.de/contentid/193565
Ausgedruckt am: 22.11.2024 um 03:11 Uhr
2 Kommentare
Neuester Kommentar
Moin.
Irgendwie fehlt die Into Anweisung in Deinem Skript...
HTH
MK
Irgendwie fehlt die Into Anweisung in Deinem Skript...
DECLARE @column_name varchar(max)
DECLARE @durchlauf_column_name varchar(max)
DECLARE var_Cursor CURSOR FOR
SELECT column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME ='tab_name'
OPEN var_Cursor
FETCH NEXT FROM var_Cursor;
INTO @column_name
WHILE @@FETCH_STATUS = 0
BEGIN
Set @durchlauf_column_name = @column_name
print @durchlauf_column_name
FETCH NEXT FROM var_Cursor
INTO @column_name
END
CLOSE var_Cursor
DEALLOCATE var_Cursor
GO
HTH
MK