#sql #sql-server #sql-server-2008 #triggers
#sql #sql-сервер #sql-server-2008 #триггеры
Вопрос:
Я создал триггеры для ВСТАВКИ и ОБНОВЛЕНИЯ отдельно. Триггер собирается вставить строку в Schema2 при выполнении вставки в Schema1. Таблицы:
- Схема 1.Temp1
- Schema2.Temp2
Создание триггера выполнено успешно.
Но когда я вставляю данные в Temp1
, это выдает мне ошибку для Temp2
— duplicate key. Temp2
содержит ограничения для двух других таблиц. Что может быть причиной этого и как это можно устранить?
Комментарии:
1. Я не думаю, что эта проблема имеет какое-либо отношение к триггерам. Вы просто вставляете повторяющиеся значения. Ошибка показывает, какое ограничение нарушено.
2. Пожалуйста, обновите
CREATE TABLE
инструкцию дляTemp2
. Остановка дублирующихся данных — это хорошо ™ — звучит так, как будто вы настраиваете репликацию «плохого человека», когда есть лучшие альтернативы в зависимости от того, что вы действительно хотите, чтобы эти триггеры выполняли.3. Можете ли вы показать нам структуру Table2 (столбцы, их типы данных, какие индексы у вас есть в таблице) и инструкцию, которую ваш триггер использует для вставки данных, и полное и точное сообщение об ошибке, которое вы получаете??
Ответ №1:
Когда ваш триггер вызывается, попробуйте записать в Table2 (как вы сказали).
Возможно, вы не написали запрос INSERT, используя условие существования вашей строки Temp1 в Temp2.
Ваш запрос должен быть такого типа:
INSERT INTO Table2 (field list)
SELECT field list
FROM inserted
WHERE NOT EXISTS(SELECT 'key' in Table2 t2 where t2.id = inserted.field_of_key)
Таким образом, вы предотвращаете дублирование ключа, поэтому, если вы также хотите обновить свою таблицу2 в insert, вы можете написать строку ОБНОВЛЕНИЯ, когда этот ключ уже существует.
Скажите мне, все ли в порядке