Hallo Forumsgemeinde,
mit Hilfe einer "Hilfstabelle" wird durch mehrere dynamisch definierte "Zieltabellen" geloopt.
Der angehängte Code macht auch genau das was er soll.
Allerdings möchte ich nun nicht in jeder der "Zieltabellen" den Wert in "Ergebniswert_in_Spalte" einfach um 1 hochzählen (Ergebniswert_in_Spalte += 1).
Stattdessen soll vor dem Update der Wert aus "Ergebniswert_in_Spalte" nach dem INSERT INTO ausgelesen, neu berechnet und dann als Variable im UPDATE eingefügt werden.
Ich hatte mir das so gedacht, komme da aber nicht weiter - beim print kommt nix.
Vielleicht gibt es ja hierzu auch den ein oder anderen hilfreichen Tipp von Euch.
Vorab schonmal vielen Dank.
Gruß
Mateng
mit Hilfe einer "Hilfstabelle" wird durch mehrere dynamisch definierte "Zieltabellen" geloopt.
Der angehängte Code macht auch genau das was er soll.
Code:
-- Variablen definieren
declare @Hilfstabelle table (Hilfsspalte nvarchar(10))
declare @aktuelleAuswahl nvarchar(10)
declare @Zieltabelle nvarchar(max)
declare @cmd as varchar(1000)
declare @columns_all nvarchar(max)
Set @columns_all = ‘meine, ganzen, spalten'
-- Werte in Hilfstabelle laden
INSERT INTO @Hilfstabelle (Hilfsspalte)
SELECT test
FROM Testtabelle
-- Loop durch Hilfstabelle
WHILE EXISTS (SELECT Hilfsspalte FROM @Hilfstabelle)
BEGIN
-- Bezeichnung auswählen
SELECT TOP 1 @aktuelleAuswahl = Hilfsspalte
FROM @Hilfstabelle
ORDER BY Hilfsspalte ASC
-- mit Bezeichnung arbeiten
SET @Zieltabelle = 'System_' + @aktuelleAuswahl;
-- kopieren
set @cmd = 'INSERT INTO ' + @Zieltabelle + '(' + @columns_all + ')
SELECT ' + @columns_all + '
FROM ' + @Zieltabelle + '
WHERE ID = (SELECT MAX(ID) FROM ' + @Zieltabelle + ')';
exec (@cmd);
-- neue Werte setzen
set @cmd = 'UPDATE ' + @Zieltabelle + ' SET Ergebniswert_in_Spalte += 1, Created = Current_Timestamp WHERE ID = (SELECT MAX(ID) FROM ' + @Zieltabelle + ')';
exec (@cmd);
-- Bezeichnung aus Hilfstabelle löschen
DELETE FROM @Hilfstabelle WHERE Hilfsspalte = @aktuelleAuswahl
END
Stattdessen soll vor dem Update der Wert aus "Ergebniswert_in_Spalte" nach dem INSERT INTO ausgelesen, neu berechnet und dann als Variable im UPDATE eingefügt werden.
Ich hatte mir das so gedacht, komme da aber nicht weiter - beim print kommt nix.
Code:
declare @counter int;
SELECT 'Ergebniswert_in_Spalte INTO ' + @counter + ' FROM ' + @Zieltabelle + ' WHERE ID = (SELECT MAX(ID) FROM ' + @Zieltabelle + ')';
--select @counter = 'Ergebniswert_in_Spalte FROM ' + @Zieltabelle + ' WHERE ID = (SELECT MAX(ID) FROM ' + @Zieltabelle + ')'
print @counter -- nur zur Kontrolle
set @cmd = 'UPDATE ' + @Zieltabelle + ' SET Ergebniswert_in_Spalte = ' + @counter + ', Created = Current_Timestamp WHERE ID = (SELECT MAX(ID) FROM ' + @Zieltabelle + ')';
exec (@cmd);
Vorab schonmal vielen Dank.
Gruß
Mateng