SQL Server:程序不输出任何内容?

时间:2010-09-03 11:37:50

标签: sql sql-server sql-server-2008 stored-procedures

我正在尝试创建一个存储过程,该过程将从sys.databases和sys.database_files中获取数据,并将此信息组合到单个结果集中。这是代码

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

3 个答案:

答案 0 :(得分:2)

这是因为你所有的sproc实际上都在做:

SET NOCOUNT ON

由于GO之后的下一行是结束该批处理,所以只使用SET NOCOUNT语句创建了sproc!

答案 1 :(得分:2)

由于GO s,您的存储过程仅包含SET NOCOUNT ON

删除GO s。

答案 2 :(得分:1)

那是因为存储过程只会运行到第一个GO - 其余的是单独的语句。您的存储过程将仅包含SET NOCOUNT ON - 其余的只运行一次;当你实际创建存储过程时 - 此时它们被视为单独的命令。