none
Abfrage mit verschiedenen Where Bedienungen RRS feed

  • Frage

  • Hallo

    ich bin auf der Suche nach einer Lösung für folgendes Problem. Ich möchte eine Abfrage schreiben welche mir das Datum der letzten Sicherung aller Datenbanken zurück liefer.

    Datenbankname   | letzte Vollsicherung | letzte Diff-Sicherung | letzte LOG Sicherung

    -------------------------------------------------------------------------------------------------------------

     DB1                      | 20.06.15                 |  24.06.15                  |  29.06.15

    bisher sieht meine Lösung so aus dass ich die Daten für Voll, DIFF und Log separat abfrage

    select distinct database_name,max(backup_finish_date)  from msdb.dbo.backupset
    where type like 'd'
    group by database_name

    Und dann nochmal für L und T

    Wie kann ich die letzten Backup Läufe der Kategorie neben einander anzeigen

    Danke für die Hilfe


    Benjamin Hoch
    MCSA: Microsoft Certified Solutions Associate - SQL Server 2012,
    MCSA: Microsoft Certified Solutions Associate - Windows Server 2012,

    Montag, 29. Juni 2015 09:55

Antworten

  • Hallo Benjamin,

    indem Du mit einer CASE WHEN Anweisung die Backup-Type prüfst und davon abhängig die Werte über mehrere Spalten verteilst; nennt man auch Pivot Abfrage:

    select database_name
          ,max(CASE WHEN type = 'D' THEN backup_finish_date END) LastFull
          ,max(CASE WHEN type = 'I' THEN backup_finish_date END) LastDiv
          ,max(CASE WHEN type = 'L' THEN backup_finish_date END) LastLog
    from msdb.dbo.backupset
    group by database_name

    Ginge auch mit der Pivot Anweisung, siehe Verwenden von PIVOT und UNPIVOT


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Montag, 29. Juni 2015 10:24
  • Pivot geht dann so:

    SELECT Database_Name, [D] AS [Full], [I] AS Diff, [L] AS [Log]
     FROM
     (
         select distinct database_name, backup_finish_date as bfd, type
         from msdb.dbo.backupset
         ) AS p
     PIVOT
     (
     Max (bfd)
     FOR type in ([D],[L],[I])
     ) AS pvt
     ORDER BY database_name;

    Einen schönen Tag noch,
    Christoph
    --
    Microsoft SQL Server MVP - http://www.insidesql.org/blogs/cmu

    Montag, 29. Juni 2015 10:31

Alle Antworten

  • Hallo Benjamin,

    indem Du mit einer CASE WHEN Anweisung die Backup-Type prüfst und davon abhängig die Werte über mehrere Spalten verteilst; nennt man auch Pivot Abfrage:

    select database_name
          ,max(CASE WHEN type = 'D' THEN backup_finish_date END) LastFull
          ,max(CASE WHEN type = 'I' THEN backup_finish_date END) LastDiv
          ,max(CASE WHEN type = 'L' THEN backup_finish_date END) LastLog
    from msdb.dbo.backupset
    group by database_name

    Ginge auch mit der Pivot Anweisung, siehe Verwenden von PIVOT und UNPIVOT


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Montag, 29. Juni 2015 10:24
  • Pivot geht dann so:

    SELECT Database_Name, [D] AS [Full], [I] AS Diff, [L] AS [Log]
     FROM
     (
         select distinct database_name, backup_finish_date as bfd, type
         from msdb.dbo.backupset
         ) AS p
     PIVOT
     (
     Max (bfd)
     FOR type in ([D],[L],[I])
     ) AS pvt
     ORDER BY database_name;

    Einen schönen Tag noch,
    Christoph
    --
    Microsoft SQL Server MVP - http://www.insidesql.org/blogs/cmu

    Montag, 29. Juni 2015 10:31