• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Frage mit Variable aus SQL Procedure rechnen

Mateng

Neues Mitglied
Hallo Forumsgemeinde,

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
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.
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);
Vielleicht gibt es ja hierzu auch den ein oder anderen hilfreichen Tipp von Euch.

Vorab schonmal vielen Dank.
Gruß
Mateng
 
Werbung:
Zurück
Oben