我目前是JR。 DBA和SQL Server上的一个巨大的菜鸟。
我的大多数数据库中都有一个表,我需要找到一种方法从包含它的所有数据库中查询该表的大小。
例如:
dbA Table1大小 dbB Table1大小 等
我找到了多个查询,它们会从一个数据库中提供表,但不是全部。我还发现了一个查询,它将收集所有数据库中的表,但不会给我大小。
下面是我发现的列出DBName,我需要的特定表,但没有大小。
SET NOCOUNT ON
DECLARE @AllTables table (DbName sysname,SchemaName sysname, TableName sysname)
DECLARE
@SearchDb nvarchar(200)
,@SearchSchema nvarchar(200)
,@SearchTable nvarchar(200)
,@SQL nvarchar(4000)
SET @SearchDb='%'
SET @SearchSchema='%'
SET @SearchTable='%docs%'
SET @SQL='select ''?'' as DbName, s.name as SchemaName, t.name as TableName from [?].sys.tables t inner join sys.schemas s on t.schema_id=s.schema_id WHERE ''?'' LIKE '''+@SearchDb+''' AND s.name LIKE '''+@SearchSchema+''' AND t.name LIKE '''+@SearchTable+''''
INSERT INTO @AllTables (DbName, SchemaName, TableName)
EXEC sp_msforeachdb @SQL
SET NOCOUNT OFF
SELECT * FROM @AllTables ORDER BY DbName, SchemaName, TableName
有人可以帮助我如何在那里获得桌子的大小吗?
谢谢!
答案 0 :(得分:0)
使用PowerShell快速而肮脏:
$s = new-object microsoft.sqlserver.management.smo.server "your_server_here";
foreach ($db in $s.Databases) {
foreach ($table in $db.Tables) {
$table | select @{name="db";expression={$db.name}}, name, dataspaceused
}
}
尺寸列于Kb。