SQL Server: процедура ничего не выводит? - PullRequest
1 голос
/ 03 сентября 2010

Я пытаюсь создать хранимую процедуру, которая будет извлекать данные из 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 ]

2 голосов
/ 03 сентября 2010

Из-за GO с ваша хранимая процедура содержит только SET NOCOUNT ON.

Удалить GO с.

2 голосов
/ 03 сентября 2010

Это потому, что все ваши sproc на самом деле будут делать:

SET NOCOUNT ON

Как следующая строка после этого - GO - это завершает этот пакет, и поэтому sproc будет создан только с этим SET NOCOUNTВыписка в!

1 голос
/ 03 сентября 2010

Это потому, что хранимая процедура будет выполняться только до первого GO - остальные являются отдельными операторами. Будет создана ваша хранимая процедура, содержащая просто SET NOCOUNT ON - остальные будут выполнены только один раз; когда вы действительно создали хранимую процедуру - в этот момент они рассматривались как отдельные команды.

...