Frage mit Variable aus SQL Procedure rechnen

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

Mateng

Neues Mitglied
29 Oktober 2017
14
0
1
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: