SQL Server 2005 Delete Trigger select from deleted возвращает null

У меня есть таблица под названием hl7_lock в SQL Server с этими столбцами:

hl7_id lock_dtm lock_user

У меня есть 3 триггера в таблице для UPDATE, INSERT и DELETE

Таблица никогда не обновляется, но триггер INSERT работает отлично. Однако этот триггер удаления иногда помещает запись в hl7_lock_log с нулевым значением hl7_id.

    SET NOCOUNT ON;
declare @hl7_id decimal(18,0)
select @hl7_id = hl7_id from deleted
insert into hl7_lock_log (user_name, action, hl7_id, dtm)                        
        values(system_user, 'Delete', @hl7_id,getdate())

Остальные поля вставлены успешно, но hl7_id имеет значение null. У удаленных записей нет нулевого hl7_id.

Мы установили SQL Server SP 2 на выходных, но это не улучшило ситуацию. Кто-нибудь видел такое поведение в триггере SQL Server. Есть какие-нибудь советы, как исправить мой триггер?


person Jim Blizard    schedule 11.05.2009    source источник


Ответы (2)


происходит ли это при удалении только одной записи или при удалении нескольких записей? триггер не сработает, если будет удалено более одной записи.

вам следует сделать что-то вроде этого:

вставить в hl7_lock_log (имя_пользователя, действие, hl7_id, dtm) выбрать system_user, 'Удалить', hl7_id, getdate () из удаленных

person DForck42    schedule 11.05.2009

Вы уверены, что записи находятся в «удаленной» таблице? Если в вашей основной таблице запущен оператор удаления, который удаляет нулевые записи, похоже, что приведенный выше код все равно будет вставлен в ваш журнал блокировок.

Возможно, проверка наличия каких-либо записей перед вставкой решит проблему.

Как также указывает Тирстер, вам нужно будет отрегулировать удаление нескольких записей в одном операторе.

person Jay S    schedule 11.05.2009