2015-05-30 43 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 
相关问题