Триггеры в SQL Server 2008

#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, вы можете написать строку ОБНОВЛЕНИЯ, когда этот ключ уже существует.

Скажите мне, все ли в порядке