Ваш триггер плох во многих отношениях. Во-первых, вы не можете добавить связанный сервер в триггер. Вы должны добавить это один раз в административном порядке и не беспокоиться об этом снова.
Следующее и чрезвычайно важное значение, даже при отсутствии связанного сервера, ваш триггер будет работать только в том случае, если вставлена и обновлена одна строка, и не будет работать должным образом, если происходит вставка / обновление нескольких строк. Это первое, самое основное правило разработки триггеров, никогда не предполагайте, что обрабатывается только одна строка. Каждый раз, когда я вижу использованное предложение values или значение из вставленной или удаленной установки в переменную, я знаю, что триггер неверный и его нужно переписать. Похоже, это отправляет электронное письмо. Вы действительно хотите отправить 1907898 электронных писем, если было обновлено столько записей или только одна? Если вы хотите только один, вам нужен способ идентифицировать все затронутые идентификаторы. Что вы на самом деле хотите, чтобы произошло, если кто-то должен обновить целую кучу цен и делает это через основанную на множестве статистику обновления, а не вручную через пользовательский интерфейс по одному за 10 000 цен? И не говорите, что только одна запись когда-либо будет обновлена или вставлена. Рано или поздно кому-то понадобится выполнить пакетную вставку или обновление, и ваш триггер тихо вызовет ошибку. Вы даже не узнаете, что это не удалось, потому что это не приведет к ошибке, просто не будет делать то, что вам нужно. Вот почему возникают кошмары, которые невозможно исправить, проблемы с целостностью данных.
Еще одна вещь, то, как написано это, БД не изменится, поэтому вам больше не нужна переменная со снятым содержимым связанного сервера. В противном случае, как wrttten, вам придется перейти на динамический sql, чтобы заставить это работать должным образом, и это плохая идея в триггере (или где-то еще обычно), и так как он не будет меняться, нет никаких причин использовать его.
Основанное на множестве решение (при условии, что вы хотите одну запись для каждого элемента, вставленного или обновленного, и при условии, что вы настроили постоянный связанный сервер):
INSERT INTO myserver].mydatabase.[dbo].[maildetails]
(
'to', 'cc', 'from', 'subject', 'body', 'status',
'Attachment', 'APPLICATION', 'ID', 'Timestamp', 'AttachmentName'
SELECT 'P23741', '', '', 'XMLFAILED', INPUT_XML_FILE_NAME , '4',
'', '8', '', GETDATE(), ''
FROM inserted
WHERE status = 'Fail'
Последнее, что я вам предупреждаю, это то, что даже это не удастся, если связанный сервер по какой-либо причине выйдет из строя. Это означает, что пока он не работает, никакие записи не могут быть добавлены или изменены в таблице. Обдумайте это очень внимательно, прежде чем включать это в триггер.