我正在尝试创建一个存储过程,该过程将从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
答案 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 - 其余的只运行一次;当你实际创建存储过程时 - 此时它们被视为单独的命令。