Давайте поговорим о том, почему вы можете сделать это в триггере. Предположим, у вас есть триггер аудита, и вы хотите добавить дату, когда произошла операция, сначала установив дату на текущую дату, а затем убедившись, что все вставленные записи используют эту дату при добавлении в таблицу аудита. это если дата не является полем в вашей исходной таблице. В триггере переменные часто используются для получения какой-либо системной информации, которая не сохраняется в базовой таблице, или для установки значения некоторой переменной на основе вычислений. Это следует делать только в том случае, если вы хотите, чтобы все записи во вставленной таблице имели одинаковое значение.
С другой стороны, если вы устанавливаете переменную таким образом, который указывает, что вы думаете, что будет только одна запись, то триггер неправильный и должен быть исправлен. Обычно ошибки такого типа заканчиваются вставкой в другую таблицу в предложении значений, а не в выборке.
Ключ к пониманию правильности действий - посмотреть, что произойдет, если во вставленной таблице будет несколько записей.
Позвольте привести пример:
declare @client_id int
declare @date datetime
select @client_id = client_id from inserted
set @date = getdate()
insert table2 (client_id, action_date)
values (@client_id, @date)
В этом случае установка значения переменной для client_id неверна, поскольку во вставленной таблице может быть 1000 записей и 20 различных client_id. Однако установка поля даты будет хорошим вариантом использования переменной, поскольку вы хотите, чтобы дата действия была одинаковой для всего пакета.