Триггер удаления SQL Server 2005 «выбрать из удаленных» возвращает ноль - PullRequest
1 голос
/ 11 мая 2009

У меня есть таблица с именем hl7_lock в SQL Server со следующими столбцами:

hl7_id lock_dtm lock_user

У меня на столе три триггера: ОБНОВЛЕНИЕ, ВСТАВКА и УДАЛЕНИЕ

Таблица никогда не обновляется, но триггер 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. Любой совет, как исправить мой триггер?

Ответы [ 2 ]

6 голосов
/ 11 мая 2009

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

вы должны сделать что-то более похожее на это:

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

1 голос
/ 11 мая 2009

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

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

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

...