2016-10-28 113 views
0

我有一張表,其中包含特定服務器上數據庫的所有名稱。我希望能夠使用相關的數據庫大小更新DBSizeMB列。使用SELECT變量進行更新 - TSQL

到目前爲止,我的代碼是:

DECLARE @DatabaseName VARCHAR(100) 

UPDATE master.dbo.mytableName 
    SET DBsizeMB = (SELECT total_size_mb = CAST(SUM(size) * 8./1024 AS DECIMAL(8,2)) 
         FROM master.sys.master_files) 
    WHERE DBSizeMB = NULL 
      AND DatabaseName = @DatabaseName 

眼下SELECT總規模部分總結了所有數據庫的大小。

如何設置它來更新每個單獨的數據庫?

+0

不建議在'master'中存儲自定義數據。 –

+1

你的代碼根本不會像這樣工作。 sys.master_files是每個數據庫的所有文件。絕對不要在master中創建自己的表。這是一個非常糟糕的主意。 –

+0

好的,但是它在開發服務器上,並且它被高級DBA批准存儲在系統db – AznDevil92

回答

2

Correlatesub-query

UPDATE mt 
SET DBsizeMB = (SELECT total_size_mb = Cast(Sum(size) * 8./1024 AS DECIMAL(8, 2)) 
        FROM master.sys.master_files f 
          JOIN sys.databases d 
          ON f.database_id = d.database_id 
        WHERE d.NAME = mt.DatabaseName) 
FROM master.dbo.mytableName mt 
WHERE DBSizeMB IS NULL 

JOIN版本

WITH cte 
    AS (SELECT total_size_mb = Cast(Sum(size) * 8./1024 AS DECIMAL(8, 2)),d.name 
     FROM master.sys.master_files f 
       JOIN sys.databases d 
        ON f.database_id = d.database_id) 
UPDATE mt 
SET DBsizeMB = c.total_size_mb 
FROM master.dbo.mytableName mt 
     JOIN cte c 
     ON c.NAME = mt.DatabaseName 
WHERE DBSizeMB IS NULL 

而且在評論中提到,不Master數據庫中創建表。即使在MSDN中也提到了

不要在master中創建用戶對象。

+1

我需要更改'WHERE DBSizeMB IS NULL'而不是'= NULL' – AznDevil92