Триггер обновления / удаления SQL не работает должным образом - PullRequest
2 голосов
/ 30 июня 2010

У меня есть триггер, который используется для аудита вставленных, обновленных и удаленных строк.У меня возникла проблема с получением старых значений и новых значений из триггера.Триггер использует цикл для вставки всех значений любой строки, которая была каким-либо образом изменена (вставлена, обновлена, удалена).Однако мой код возвращает не значения, а имена столбцов в качестве значений.

Вот часть моего кода:

SELECT @COLNAME = NAME 
FROM SYSCOLUMNS 
WHERE COLID = @FIELD AND
    ID = (SELECT ID FROM SYSOBJECTS WHERE NAME = 'FIN_HOTEL_DTL_TYPE') 
SELECT @OLDVAL = SUBSTRING(@COLNAME, 2, LEN(@COLNAME)) FROM DELETED 
SELECT @NEWVAL = SUBSTRING(@COLNAME, 2, LEN(@COLNAME)) FROM INSERTED 
SELECT @MODBY = MODIFIED_BY FROM INSERTED 
SELECT @MODDT = MODIFIED_DATETIME FROM INSERTED 

1 Ответ

3 голосов
/ 30 июня 2010

T-SQL - это просто другой мир.

Ваш код делает именно то, что вы ему сказали.@ColName - не ссылка на объект столбца, а переменная, содержащая строковое значение, которое вы загрузили с именем столбца.

Предлагаю вам посмотреть пример .Если хотите, прочитайте все это, но если вы спешите, перейдите к фразе CREATE TRIGGER Audit.

Кроме того, найдите время, чтобы сделать это с помощью логики, основанной на множестве - как в примере.Используйте всю мощь и производительность СУБД, используя T-SQL и освобождая от строки кодирование строк.Нет, правда.Кодированные петли = низкая производительность.При необходимости СУБД будет реализовывать циклы (или как пожелает) в фоновом режиме.

Удачи!


Я пытался найти эту ссылку ранее.Я считаю, что эта запись Пола Нильсена очень близка к тому, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...