查找实例上几个相同数据库的表的数据大小

whe*_*ike 6 sql-server sql-server-2008-r2

我在一个实例中有几个具有相同架构/表结构的相同数据库。我需要找到他们都有的一张桌子的大小。例如,我在一个实例上有 30 个数据库,所有数据库都有一个“个人信息”表。我需要找到一种方法来查询他们都拥有的“个人信息”表的大小,而不是单独访问每个数据库。

有没有办法做到这一点?

类似于 SP_Spaceused 用于大小“数据列”

Aar*_*and 8

DECLARE @table  SYSNAME = N'Personal Information',
        @schema SYSNAME = N'dbo';

CREATE TABLE #sz
(
  dbname     NVARCHAR(255),
  fullname   NVARCHAR(768), [rows] SYSNAME, 
  reserved   SYSNAME,       [data] SYSNAME,
  index_size SYSNAME,       unused SYSNAME
);

DECLARE @sql NVARCHAR(MAX) = N'DECLARE @t NVARCHAR(512);';

SELECT @sql += N'IF EXISTS (SELECT 1 FROM ' + QUOTENAME(name)
    + N'.sys.tables AS t INNER JOIN ' + QUOTENAME(name)
    + N'.sys.schemas AS s ON t.[schema_id] = s.[schema_id]
    WHERE t.name = @table AND s.name = @schema) 
    BEGIN
      SET @t = N''' + QUOTENAME(name) + N'.'' + QUOTENAME(@schema) 
        + N''.'' + QUOTENAME(@table); INSERT #sz(fullname, [rows],
          reserved, [data], index_size, unused) EXEC ' 
          + QUOTENAME(name) + N'.sys.sp_spaceused @t; UPDATE #sz
            SET dbname = N''' + name + N''' WHERE dbname IS NULL;
    END '
FROM sys.databases 
WHERE database_id > 4 AND [state] = 0 AND is_read_only = 0;

EXEC sys.sp_executesql @sql, N'@table SYSNAME, @schema SYSNAME', @table, @schema;

SELECT [database] = dbname, 
  [schema] = @schema, [table] = @table, 
  [rows], reserved, [data], index_size, unused
FROM #sz;

DROP TABLE #sz;
Run Code Online (Sandbox Code Playgroud)