有没有一种简单的方法可以列出 MSSQL 服务器上每个数据库中每个表的大小?
我在 sys.tables 上使用了一个查询来获取单个数据库的结果,但我们每台服务器有 >100 个数据库,因此获得相同结果但适用于所有数据库的方法会很棒。
目前,我必须从 master.sys.databases 创建一个临时数据库列表,然后使用游标对其进行迭代,构建查询并将结果插入到带有 .sys 的临时表中EXEC sp_executeSQL @SQLString
。
有没有一种简单的方法可以列出 MSSQL 服务器上每个数据库中每个表的大小?
我在 sys.tables 上使用了一个查询来获取单个数据库的结果,但我们每台服务器有 >100 个数据库,因此获得相同结果但适用于所有数据库的方法会很棒。
目前,我必须从 master.sys.databases 创建一个临时数据库列表,然后使用游标对其进行迭代,构建查询并将结果插入到带有 .sys 的临时表中EXEC sp_executeSQL @SQLString
。
如果您想在您的所有环境中为您的所有数据库获得此功能...并且您不介意使用 PowerShell...您将需要从至少安装了 SQL Server 2008 Management Studio 的机器上运行它。
如标记为
DataSpaceUsed
“KB”的 SMO 对象输出,您可以将其修改为您选择的度量,只需为其添加缩写参考即可。所以如果我想要 "MB":$_.DataSpaceUsed/1MB
。在函数
([string[]]$server)
中,括号“[]”表示参数接受一个对象数组。因此,如果您在文件中列出了服务器,则可以像这样调用该函数:我更喜欢
Out-GridView
最初使用来查看输出,它可以轻松地直接复制到 Excel 中。如果需要,您还可以将其输出到其他受支持的 PowerShell 格式。以屏幕截图为例,您也可以只列出服务器:
取自 Stack-Overflow:获取数据库中所有表的大小
我使用了以前答案的合并:
但是,您可以尝试使用
sp_msforeachdb
一些警告。话虽如此,我已经成功使用了几年。
基本上它在 ? 与数据库名称。
您也可以尝试 Aaron Bertrand 的替换版本。 我自己没有尝试过,但应该会更好。
以下将解决您的问题:
类似于 Fer R 的答案,但合并为一个结果集。与 sp_MSforeachdb 相关的警告适用。