我正在尝试在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' ;
答案 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;'