日期:2014-05-17  浏览次数:20443 次

USE [Database]是否存在BUG呢??
--本人想达到的最终目的是获取当前实例上的所有数据库的可用空间,数据库大小已通过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;