T SQL脚本循环所有用户数据库并从三个表中选择所有(*)的计数

时间:2016-08-19 12:08:26

标签: sql sql-server

我正在尝试在T-SQL中创建一个脚本来循环所有用户数据库并从三个表中选择所有(*)的计数,其中count条件是> 2,如果满足电子邮件应该被触发。

我试过了,但我确信我犯的是一个很大的错误。我是脚本新手,请帮忙。

我尝试过使用:

DECLARE @TableRowCounts TABLE (
    [databaseNAme] Varchar(100), 
    [RowCount] INT
);

INSERT INTO @TableRowCounts ([databaseNAme], [RowCount])
EXEC sp_MSforeachdb 'select ''?'' as database_name,use ''?'' select count(*) TABLE_XYZ' ;

Select * From @TableRowCounts

而且:

DECLARE @TableRowCounts TABLE (
    [databaseNAme] Varchar(100),
    [TableName] VARCHAR(128), 
    [RowCount] INT
);

INSERT INTO @TableRowCounts ([databaseNAme],[TableName], [RowCount])
EXEC sp_MSforeachdb 'select ''?'' as database_name,o.name,max(i.rowcnt )
                      From sys.objects o 
                    inner join sys.sysindexes i on o.object_id=i.id 
                    where o.type=''U'' and o.name =''tableXYZ'' 
                    group by o.name' ;

2 个答案:

答案 0 :(得分:0)

试试这个

DECLARE @TableRowCounts TABLE
 ([databaseNAme] Varchar(100), 
 [RowCount] INT) ;

  INSERT INTO @TableRowCounts ([databaseNAme], [RowCount]) 
  EXEC sp_MSforeachdb 'use ?; select ''?'',count(*) TABLE_XYZ' ;

答案 1 :(得分:0)

这样,每个数据库中存在3个表

EXEC sp_MSforeachdb 'use [?]; select ''?'' as database_name, (select count(*) as cnt from Table_XYZ) + (select count(*) as cnt from Table_PQR) + (select count(*) as cnt from Table_ABC) as cnt';

如果您需要为每张桌子单独计数

EXEC sp_MSforeachdb 'use [?]; select ''?'' as database_name, ''Table_XYZ'' as tableName, count(*) as cnt from Table_XYZ union select ''?'' , ''Table_PQR'', count(*) from Table_PQR union select ''?'' , ''Table_ABC'' , count(*) from Table_ABC;'