2015-05-30 48 views
6

我將歸檔以獲取從所有數據庫中提取一些數據並返回單個結果集的查詢。SQL Server:將sp_MSforeachdb合併到單個結果集中

現在,我有以下幾點:

DECLARE @command varchar(4000) 
SELECT @command = ' 
USE [?] 
SELECT 
    database_name = DB_NAME(database_id) 
    , log_size_mb = CAST(SUM(CASE WHEN type_desc = "LOG" THEN size END) * 8./1024 AS DECIMAL(8,2)) 
    , row_size_mb = CAST(SUM(CASE WHEN type_desc = "ROWS" THEN size END) * 8./1024 AS DECIMAL(8,2)) 
    , total_size_mb = CAST(SUM(size) * 8./1024 AS DECIMAL(8,2)) 
    , Kostenstelle = (select value from sys.extended_properties WHERE name =  "Kostenstelle") 
FROM sys.master_files WITH(NOWAIT) 
WHERE database_id = DB_ID() 
GROUP BY database_id 
' 
EXEC sp_MSforeachdb @command 

上面的代碼將在多個結果集返回。

結果應該如下所示:

|database_name|log_size_mb|row_size_mb|Kostenstelle| 
+-------------+-----------+-----------+------------+ 
|demoA  |   12|   10|  xxxx| 
|demoB  |   52|   12|  xxxx| 

回答

2

您可以在此表中的一些數據庫創建表並保存結果,如果你在你的查詢添加INSERT聲明:

DECLARE @command varchar(4000) 
SELECT @command = ' 
USE [?] 
INSERT INTO <DbName>.<SchemaName>.<TableName> 
SELECT 
database_name = DB_NAME(database_id) 
... 
+0

好吧,是的,這是可能的,但我的願望是沒有如果可能,請使用表格。我也嘗試用declare @mytable table在內存中創建一個臨時表...但它不適用於我,因爲「mytable在ms_foreachdb循環中不可用:-( – Alex

4

得到了從一個同事回覆 - 1000謝謝

DECLARE @command varchar(4000) 
SELECT @command = ' 
USE [?] 
SELECT 
database_name = CAST(DB_NAME(database_id) AS VARCHAR(50)) 
, log_size_mb = CAST(SUM(CASE WHEN type_desc = "LOG" THEN size END) * 8./1024 AS DECIMAL(8,2)) 
, row_size_mb = CAST(SUM(CASE WHEN type_desc = "ROWS" THEN size END) * 8./1024 AS DECIMAL(8,2)) 
, total_size_mb = CAST(SUM(size) * 8./1024 AS DECIMAL(8,2)) 
, Kostenstelle = CAST((select value from sys.extended_properties WHERE  name =  "Kostenstelle") AS VARCHAR(10)) 
FROM sys.master_files WITH(NOWAIT) 
WHERE database_id = DB_ID() 
GROUP BY database_id 
' 

DECLARE @DatabasesKst TABLE 
(
    database_name VARCHAR(50), 
    log_size_mb DECIMAL(8,2), 
    row_size_mb DECIMAL(8,2), 
    total_size DECIMAL(8,2), 
    Kostenstelle VARCHAR(100) 
) 

INSERT INTO @DatabasesKst 
EXEC sp_MSforeachdb @command 

select * from @DatabasesKst 
相關問題