2014-02-20 154 views
0

当我尝试运行此删除了记录计数记录

DECLARE @by varchar(20) = 'Myself' 

INSERT INTO dbo.MiscLog(LogType, onTable, Message, CreateBy) 
    SELECT 
     'Info', 'dbo.History', 
     'There are ' + CONVERT(varchar(20), COUNT(ID)) + ' old records being purged.', @by 
    FROM 
     (DELETE FROM dbo.History 
     OUTPUT deleted.ID 
     WHERE keyDate < dateadd(y, -7, getDate())) H 

我得到

消息5322,级别15,状态1,行5
一个聚集函数是不是在允许的SELECT子句包含嵌套的INSERT,UPDATE,DELETE或MERGE语句。

回答

1

尝试将已删除记录的副本插入临时表中,然后在临时表上运行COUNT()聚合。

SELECT * 
INTO #tempLog 
    FROM 
     (DELETE FROM dbo.History 
     OUTPUT deleted.ID 
     WHERE keyDate < dateadd(y, -7, getDate())) H 

INSERT INTO dbo.MiscLog(LogType, onTable, Message, CreateBy) 
    SELECT 
     'Info', 'dbo.History', 
     'There are ' + CONVERT(varchar(20), COUNT(ID)) + ' old records being purged.', @by 
FROM #tempLog 
0

在表上创建一个AFTER DELETE触发器。您可以查询deleted的计数。

SELECT COUNT(*) 
FROM deleted