我想分析我的数据库,并通过"sp_MSforeachtable 'EXECUTE sp_spaceused [?];';"
从 ADODB 命令或记录集执行将每个表的结果输入 MS Excel 工作表,然后使用 CopyFromRecordset 将结果输出到 Excel。
这是我正在使用的代码:
Sub analyseHermesDB()
Dim oConn As Object, oRec As Object, oField As Object, iIndx As Integer
' sp_MSforeachtable 'EXECUTE sp_spaceused [?];';
Set oConn = CreateObject("ADODB.Connection")
Set oRec = CreateObject("ADODB.Recordset")
oConn.Open "FILE NAME=" & ThisWorkbook.Path & "\conn.udl"
With oRec
.activeconnection = oConn
.Source = "sp_MSforeachtable 'EXECUTE sp_spaceused [?];';"
.cursorlocation = 3
.Open
For iIndx = 0 To .fields.Count - 1
ActiveCell.Offset(0, iIndx).Value = .fields(iIndx).Name
Next
Do Until .EOF
ActiveCell.Offset(.absoluteposition, 0).CopyFromRecordset oRec
.movenext
Loop
ActiveCell.Offset(0, 1).Value = .RecordCount
.Close
End With
End Sub
问题是这样的:当我"sp_MSforeachtable 'EXECUTE sp_spaceused [?];';"
在 SQL Server 2008 Management Studio 中执行时,我得到每个表的一个结果集。
我只从使用 ADO 的呼叫中返回一个记录集
我究竟做错了什么?我应该尝试获取一组记录集,还是执行sp_MSforeachtable
以获取表列表然后EXECUTE sp_spaceused [?];'
为每个表执行?