--本人想达到的最终目的是获取当前实例上的所有数据库的可用空间,数据库大小已通过SP_HELPDB获取出来了。
--想了各种办法都一直达不到我想要的结果,原因是MSSQL在循环时use [database]不能实际生效。如:
exec sp_MSforeachdb 'select count(1) from sys.sysobjects'
--实际上出来的结果还是当前数据库的数量。
--我通过自己的游标进行循环,结果也一样,无法实现取各个数据库的count(1)数量。
Declare @sql varchar(500)
Declare @name varchar(32)
Declare DB cursor For
select name from sys.databases where state_desc='ONLINE'
open DB
fetch next From DB into @name
WHILE (@@FETCH_STATUS=0)
BEGIN
set @sql='use '+@name
exec (@sql)
print (@sql)
select COUNT(1) from sys.sysobjects
fetch next From DB into @name
END
CLOSE DB;
DEALLOCATE DB;
--不知道这算不算MSSQL的BUG呢??求高手帮忙出招啊??万分感谢
sp_MSforeachdb 可用空间 MSSQL BUG
------解决方案--------------------
Declare @sql varchar(500)
Declare @name varchar(32)
Declare DB cursor For
select name from sys.databases where state_desc='ONLINE'
open DB
fetch next From DB into @name
WHILE (@@FETCH_STATUS=0)
BEGIN
set @sql='select COUNT(1) from '+@name+'.sys.sysobjects'
exec (@sql)
fetch next From DB into @name
END
CLOSE DB;
DEALLOCATE DB;