• Hi,

    this is not so short anymore, but should do the trick...

    ;WITH a AS (SELECT 'Full' AS type UNION ALL SELECT 'Log' UNION ALL SELECT 'Differential'), b AS

    ( SELECT Name, DATABASEPROPERTYEX(Name, 'recovery') AS rm

    FROM sys.sysdatabases

    ), c AS

    ( SELECT * FROM a , b WHERE rm = 'FULL' OR (rm = 'SIMPLE' AND type IN ( 'FULL', 'Differential') )

    ), d AS

    ( SELECT database_name,

    Isnull(Max(recovery_model),'No Backup Taken') AS backup_recovery_model,

    CASE type

    WHEN 'D' THEN 'Full'

    WHEN 'I' THEN 'Differential'

    WHEN 'L' THEN 'Log'

    ELSE COALESCE(type,'No Backup')

    END AS BackupType,

    CONVERT(VARCHAR(17), CONVERT(DATETIME, Max(backup_finish_date), 113)) AS LastBackUpTaken

    FROM msdb.dbo.backupset

    GROUP BY database_name, type

    )

    SELECT c.Name AS DatabaseName,

    c.rm AS database_recovery_model,

    c.type AS BackupType,

    Isnull(d.LastBackUpTaken, 'Never') AS LastBackUpTaken

    FROM c LEFT OUTER JOIN d

    ON d.database_name = c.name AND c.type = d.BackupType

    WHERE NOT ( c.type = 'Differential' AND d.LastBackUpTaken IS NULL) AND c.name <> 'tempdb'

    GROUP BY c.Name, d.BackupType, d.LastBackUpTaken, c.rm, c.type

    ORDER BY 1, 3

    All corrections are welcome... 🙂

    Best regards
    karl