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

关于sql server中查询的问题
我现在在写一个程序,是对sql server进行监测,其中要监测 “数据库容量、数据库状态、未分配空间、保留空间、数据空间、索引空间、未用空间”这几项指标,得知用命令sp_MSForEachDb @Command1 = "use ? exec sp_Spaceused"即可。
问题是:我现在使用jdbc与sql连接,有下面几行代码
String sql1 ="set nocount on \n exec sp_MSForEachDb @Command1 = \"use ? exec sp_Spaceused\"";
rs=stmt.executeQuery(sql1);
while(rs.next()){
System.out.println(rs.getString(3));
}
按理说,每次都应该返回好多数据,但是每次只返回对应第一个数据库的指标。在 ssms中执行代码sp_MSForEachDb @Command1 = "use ? exec sp_Spaceused"能返回很多数据库的指标,如下面所示
master 5.25 MB 1.59 MB
2464 KB 1096 KB 1024 KB 344 KB
tempdb 8.50 MB 6.76 MB
1272 KB 496 KB 672 KB 104 KB
………………
中间省略了标题,我想问在程序中如何写才能返回所有数据库的信息?谢谢了

------解决方案--------------------
sp_MSForEachDb @Command1 
返回的事多结果集
对应程序里就是多个一个dataset中的多个datatable
------解决方案--------------------
如果不为exec sp_Spaceused 指定参数,它将返回两个 select 结果集
而且这两个结果集的列数不一样的

无法合并,你说你需要什么吧,换种方式实现吧。
------解决方案--------------------
因为你的语句是返回多个select值,但是stmt.executeQuery只会接收第一个select返回的结果。
你需要另外写一个sql语句,来一次性返回所有结果。
------解决方案--------------------
返回的多个结果集,无法绑定到datatable中造成的。