Query in Tabelle gespeichert / Auslesen und Ausführen

Mikee

Benutzer
Beiträge
8
Hallo

Ich bin neu hier und hoffe auf diesem Weg einen guten Input zur Umsetzung meiner Anforderung zu erhalten. In einer eigenen Tabelle habe ich einige Queries in einer Tabelle gespeichert die z.T. sehr gross sein können. Diese möchte ich dann aus der Tabelle auslesen und in Variablen oder einem externen File abspeichern und danach via zeitgesteuertem Job gegen die Datenbank ausführen lassen. Nebst dem Query habe ich auch eine Mailadresse in einem anderen Feld abgespeichert, an welche bei einem Ergebnis (>0 rows) des Selects der Output verschickt werden soll. Über einen Tipp bezüglich einem Vorgehen wäre ich euch sehr dankbar.

Viele Grüsse
 
Werbung:
Also Querys die als Variable vorliegen kannst du nur per dynamischem SQL ausführen. Die kannst du dafür auch direkt aus einer Tabelle auslesen. Wo das Ergebnis hin soll müsste dann am besten Bestandteil des Query-Codes sein.

Um das ganze zeitlich zu steuern gibt es wohl den MSSQL Agent, der ist aber z.B. in der SQLEXPRESS nicht enthalten. Man kann es auch per xp_cmdshell anstoßen und dann einen Task anlegen.

Beim Verschicken von E-Mails aus der DB kenne ich mich nicht so aus, sowas hab ich aber schonmal gelesen für MSSQL.
 
Besten Dank für die Antwort.
Zur Präzisierung: Es ist so, dass ich fertige auszuführende Queries in einer Tabelle habe die ich auslesen und dann gegen die DB ausführen möchte. Es soll pro row ein sql-File erstellt werden, welches dann ausgeführt werden soll und im Fehlerfall and die Mailadresse welche in einem anderen Feld gespeichert ist versendet wird. Ich habe mir vorgestellt dies über sqlcmd in einem Batch per Scheduled Task auszuführen. Ich stehe im Moment an wie ich die Erstellung der SQL-Files per row am besten bewerkstelligen kann.
 
Du musst kein "sql-File erstellen" sondern kannst beim Durchlaufen der Datensätze direkt den Code aufrufen. Dazu baust du einen Cursor der alle Datensätze durchläuft und 2 Variablen befüllt, einmal @query einmal @mail. Du musst dann aber entweder mit exec() @query ausführen und das Ergebnis irgendwo rein schreiben (meiner Meinung nach aufwendig) oder die E-Mail-Adresse und den Code zum Versand der Daten per E-Mail direkt in @query integrieren bevor du es mit exec() ausführst.
 
Werbung:
Code:
DECLARE @query VARCHAR(1000), @email VARCHAR(100)

DECLARE   [cursor1] CURSOR FOR
SELECT   query,email
FROM   tabelle

OPEN   [cursor1]  
FETCH NEXT FROM [cursor1] INTO @query,@email

WHILE   @@FETCH_STATUS = 0  
BEGIN
  EXEC(@query);
-- Du kannst auf das Ergebnis von @query hier erstmal nicht zugreifen, daher bietet es sich an @query vorher so zu gestalten das der Datenversand mit erfolgt. Oder @query muss die Daten in eine (reguläre, nicht temporäre) Tabelle schreiben und dann greifst du in einem zweiten Schritt auf die Daten zu.

   FETCH NEXT FROM [cursor1] INTO @query,@email
END

CLOSE   [cursor1]
DEALLOCATE [cursor1]
 
Zurück
Oben