2010-09-03 35 views
1

我想創建一個存儲過程,它將從sys.databases和sys.database_files中獲取數據並將這些信息合併到一個結果集中。下面的代碼SQL Server:過程不輸出任何東西?

CREATE PROCEDURE dbo.PROC_getDbInfo 
AS 
    SET NOCOUNT ON 
    GO 
    TRUNCATE TABLE dbo.dbinfo 
    GO 
    EXECUTE sp_msforeachdb 'insert into dbo.dbinfo 
      select ''?'' as name, 
        type_desc, 
        physical_name, 
        state_desc, 
        size * 1.0/128 as size_in_mb, 
        max_size, 
        growth * 1.0/128 as growth_in_mb, 
        is_percent_growth, 
        is_read_only  
    from [?].sys.database_files' 

    GO 

    SELECT @@SERVERNAME as instance_name, 
     f.name, 
     d.create_date, 
     d.compatibility_level, 
     d.collation_name, 
     d.user_access_desc, 
     d.state_desc, 
     d.recovery_model_desc, 
     d.page_verify_option_desc, 
     d.log_reuse_wait_desc, 
     f.type_desc, 
     f.physical_name, 
     f.state_desc, 
     f.size_in_mb, 
     f.max_size, 
     f.growth_in_mb, 
     f.is_percent_growth, 
     f.is_read_only 
    FROM dbo.dbinfo AS f INNER JOIN 
      sys.databases AS d 
       ON f.name = d.name 
    ORDER BY f.name 
GO 

當執行這個程序,我沒有得到任何輸出。爲什麼?

EXECUTE dbo.PROC_getDbInfo 
+0

可能是因爲sys.databases中沒有行,名稱='?' – 2010-09-03 11:42:45

+0

Noup,從谷歌查詢sp_msforeachdb ... – atricapilla 2010-09-03 12:03:06

回答

2

由於GO s,您的存儲過程只包含SET NOCOUNT ON

刪除GO s。

2

,那是因爲你所有的存儲過程,實際上做的是:

SET NOCOUNT ON 

至於之後的下一行是GO - 在結束的那批,所以存儲過程將被剛剛與創建SET NOCOUNT語句!

1

這是因爲存儲過程只會運行到第一個GO--其餘的是單獨的語句。您的存儲過程將被創建,只包含SET NOCOUNT ON - 其餘部分將只運行一次;當你實際創建存儲過程時 - 在這一點上他們被視爲單獨的命令。