1. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Query in Tabelle gespeichert / Auslesen und Ausführen

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von Mikee, 18 November 2019.

  1. Mikee

    Mikee Neuer Benutzer

    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
     
  2. ukulele

    ukulele Datenbank-Guru

    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.
     
  3. Mikee

    Mikee Neuer Benutzer

    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.
     
  4. ukulele

    ukulele Datenbank-Guru

    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.
     
  5. Mikee

    Mikee Neuer Benutzer

    Ok tönt interessant - hast du mir evt. Ein Beispiel wo ich dies nachlesen kann?
     
  6. ukulele

    ukulele Datenbank-Guru

    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]
     
    Walter gefällt das.
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden