2014-02-20 4 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 

я

Msg 5322, Level 15, State 1, Line 5
Агрегатная функция не допускается в SELECT, когда предложение FROM содержит вложенный оператор INSERT, UPDATE, DELETE или MERGE.

ответ

1

Попробуйте вставить копию удаленных записей в временную таблицу, а затем запустите агрегат COUNT() в таблице temp.

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 

 Смежные вопросы

  • Нет связанных вопросов^_^