Как Вы получаете список обновленных столбцов в триггере SQL-сервера?

Если вы пытаетесь решить бизнес-задачи, то для программирования систем Win32 лучше, чем С, есть инструменты. Clarion. Delphi. И другие я не сомневаюсь.

Но я думаю, что для изучения , как все работает , ты в хорошей форме с C.

8
задан Peter Miehle 27 May 2009 в 13:51
поделиться

4 ответа

Единственный способ проверить, изменились ли значения, - это сравнить значения в виртуальных таблицах DELETED и INSERTED в триггере. SQL не проверяет существующее значение перед обновлением до нового, он с радостью напишет новое идентичное значение поверх - другими словами, он принимает ваше слово для обновления и отслеживает обновление, а не фактические изменения.

8
ответ дан 5 December 2019 в 08:00
поделиться

Единственный способ, который я могу придумать, - это сравнить значения в DELETED и INSERTED, чтобы увидеть, какие столбцы изменились.

Это не кажется особенно элегантным решением. .

0
ответ дан 5 December 2019 в 08:00
поделиться

Я задал тот же вопрос !

Предыдущие плакаты верны - без прямого сравнения значений нельзя точно сказать, действительно ли данные изменились или нет. Однако есть несколько способов выполнить этот тип проверки, в зависимости от того, что еще вы пытаетесь сделать в триггере. В ответах на мой вопрос есть несколько полезных советов об этих различных механизмах и их компромиссах.

0
ответ дан 5 December 2019 в 08:00
поделиться

Как уже писали другие, вам нужно будет опросить INSERTED и DELETED. Единственный другой полезный совет может заключаться в том, что вы можете получить только строки с измененными значениями (и отбросить строки, которые не изменились), используя оператор EXCEPT - например:

SELECT * FROM Inserted
EXCEPT
SELECT * FROM Deleted
4
ответ дан 5 December 2019 в 08:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: