2016-01-09 40 views
1

我發現這個例子如何列出SQL Server備份日期SQL查詢Java代碼

http://www.sqlmatters.com/Articles/Checking%20when%20a%20database%20was%20last%20backed%20up.aspx

SQL查詢:

;WITH CTE_Backup AS 
(
SELECT database_name,backup_start_date,type,physical_device_name 
     ,Row_Number() OVER(PARTITION BY database_name,BS.type 
     ORDER BY backup_start_date DESC) AS RowNum 
FROM msdb..backupset BS 
JOIN msdb.dbo.backupmediafamily BMF 
ON  BS.media_set_id=BMF.media_set_id 
) 
SELECT  D.name 
      ,ISNULL(CONVERT(VARCHAR,backup_start_date),'No backups') AS last_backup_time 
      ,D.recovery_model_desc 
      ,state_desc, 
      CASE WHEN type ='D' THEN 'Full database' 
      WHEN type ='I' THEN 'Differential database' 
      WHEN type ='L' THEN 'Log' 
      WHEN type ='F' THEN 'File or filegroup' 
      WHEN type ='G' THEN 'Differential file' 
      WHEN type ='P' THEN 'Partial' 
      WHEN type ='Q' THEN 'Differential partial' 
      ELSE 'Unknown' END AS backup_type 
      ,physical_device_name 
FROM  sys.databases D 
LEFT JOIN CTE_Backup CTE 
ON   D.name = CTE.database_name 
AND   RowNum = 1 
ORDER BY D.name,type 

我需要包括;WITH CTE_Backup AS之初我在Java代碼中使用它時的查詢?

回答

1

當我在Java代碼中使用它時,是否需要將WITH CTE_Backup AS包含在查詢的開頭 ?

是的,你應該,否則使用簡單的子查詢:

SELECT  D.name 
      ,ISNULL(CONVERT(VARCHAR,backup_start_date),'No backups') AS last_backup_time 
      ,D.recovery_model_desc 
      ,state_desc, 
      CASE WHEN type ='D' THEN 'Full database' 
      WHEN type ='I' THEN 'Differential database' 
      WHEN type ='L' THEN 'Log' 
      WHEN type ='F' THEN 'File or filegroup' 
      WHEN type ='G' THEN 'Differential file' 
      WHEN type ='P' THEN 'Partial' 
      WHEN type ='Q' THEN 'Differential partial' 
      ELSE 'Unknown' END AS backup_type 
      ,physical_device_name 
FROM  sys.databases D 
LEFT JOIN (
    SELECT database_name,backup_start_date,type,physical_device_name 
      ,Row_Number() OVER(PARTITION BY database_name,BS.type 
      ORDER BY backup_start_date DESC) AS RowNum 
    FROM msdb..backupset BS 
    JOIN msdb.dbo.backupmediafamily BMF 
     ON BS.media_set_id=BMF.media_set_id 
) AS CTE 
    ON  D.name = CTE.database_name 
    AND  RowNum = 1 
ORDER BY D.name,type; 

Common Table Expression是引入派生表好看易讀的方式。

+0

你能告訴我如何擴大查詢?我想顯示更多有用的數據。 –

+0

@PeterPenzov如果您需要更多關於備份的詳細信息,請提出新問題,並考慮詢問使用http://dba.stackexchange.com – lad2025

+1

我在這裏發佈了一個問題http://dba.stackexchange.com/questions/125739/sql-queriy - 用於-SQL服務器的備份 –

0

技術上你不需要包括「;」如果這是您執行 的第一條語句。您需要在CTE(公用表表達式)中包含WITH,因爲這是識別語句的標誌。

在這種情況下,CTE將生成與子查詢解決方案相同的查詢計劃,但有時您會發現CTE更高效。 CTE還提供子查詢無法做到的解決方案(如遞歸語句)。