如何从不同的数据库中获取行数。数据库名称、架构名称和表名称,存储在SQL表中

如何从不同的数据库中获取行数。数据库名称、架构名称和表名称,存储在SQL表中,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有一个包含数据库、模式和表名的表。我想使用GROUPBY for defined column为同一表中的每一行计算行数 DECLARE @WeeklyRowCount TABLE ( db VARCHAR(50) ,sch VARCHAR(15) ,Tb VARCHAR(100) ,col VARCHAR(50) ) DECLARE @cmd VARCHAR(MAX) = ( SELECT ' UNION ALL SELECT COUNT(*) AS

我有一个包含数据库、模式和表名的表。我想使用GROUPBY for defined column为同一表中的每一行计算行数

DECLARE @WeeklyRowCount TABLE
(
    db VARCHAR(50)
    ,sch VARCHAR(15)
    ,Tb VARCHAR(100)
    ,col VARCHAR(50)    
)

DECLARE @cmd VARCHAR(MAX) = (
SELECT ' UNION ALL SELECT COUNT(*) AS C, DATE_STAMP,''' 
     + QUOTENAME(sch) + '.' + QUOTENAME(tb) 
    + ''' AS T FROM ' + QUOTENAME(db) + '.' + QUOTENAME(sch) + '.' + QUOTENAME(tb) + 'GROUP BY col'
    FROM @WeeklyRowCount )

SELECT COUNT(*) AS C, col ,'Table name' AS T FROM db.sch.tb GROUP BY col

我曾尝试使用动态SQL,但由于8000个字符的限制,无法显示完整的查询

您可以使用未记录的存储过程sp_msforeachtable对数据库中的每个表运行,以获取行计数。但是,由于它是未记录的存储过程,将来可能会删除它

从您的问题中,我了解到您希望表级别的行计数。下面的代码在表级别生成行计数并插入到表中

CREATE table WeeklyRowCount
(
db VARCHAR(50)
,sch VARCHAR(15)
,Tb VARCHAR(120)
,rcnt VARCHAR(50)
)
exece sp_MSforeachtable“INSERT INTO WeeklyRowCount(db,sch,tb,col)选择db_name()作为db,对象_SCHEMA_name(OBJECT_ID(“”))作为sch,“?”作为tb,计数(1)作为rcnt from?”
从WeeklyRowCount中选择*
如果要在不同的数据库上运行它,请对包含rowcount
WeeklyRowcount

使用dbName
去
创建表WeeklyRowCount
(
db VARCHAR(50)
,sch VARCHAR(15)
,Tb VARCHAR(120)
,rcnt VARCHAR(50)
)
使用DbName1
去
执行sp_MSforeachtable'插入dbname.dbo.WeeklyRowCount(db,sch,tb,col)选择db_name()作为db,对象_SCHEMA_name(OBJECT_ID(''?'')作为sch,''作为tb,计数(1)作为rcnt from?'
使用DbName2
去
执行sp_MSforeachtable'插入dbname.dbo.WeeklyRowCount(db,sch,tb,col)选择db_name()作为db,对象_SCHEMA_name(OBJECT_ID(''?'')作为sch,''作为tb,计数(1)作为rcnt from?'
从dbname.dbo.WeeklyRowCount中选择*
EXEC(@cmd)
似乎没有8000字符的限制。无需打印生成的语句