2013-05-10 2 views
1

Я пытаюсь использовать триггер, когда я вставляю в таблицу penduduk, а затем в таблицу muda тоже вставит, на самом деле этот триггер работает, но этот триггер становится циклом, когда я вставляю (123) в penduduk, затем вставляем снова (1234) то результат будет (123,1234,123,1234), я права использовать «От penduduk»? или я должен использовать 'FROM insert'? причиной, когда я использую FROM вставлено нет результата мой запрос, как этотпочему этот триггер всегда петли?

CREATE TRIGGER auto_muda 
ON penduduk 
FOR INSERT 
AS 
INSERT INTO muda (noktp,tgl_lahir) 
SELECT noktp, tgl_lahir FROM penduduk 
WHERE umur < 27 
+2

Вы должны и условие, чтобы добавить только те записи, которые не были вставлены до этого. –

+0

это значит, где это? Где muda.primary = penduduk.primary? – oebanez

ответ

3

Вы в настоящее время захвата все соответствующие строки из penduduk, а не логической таблицы inserted. Вы можете изменить триггер следующим образом:

CREATE TRIGGER auto_muda 
ON penduduk 
FOR INSERT 
AS 
INSERT INTO muda (noktp,tgl_lahir) 
SELECT noktp, tgl_lahir FROM inserted -- Use inserted, not the base table 
WHERE umur < 27 

От MSDN:

DML триггеров использовать удаленную и вставленную логическую (концептуальную) таблицу. Они структурно похожи на таблицу, на которой определяется триггер, то есть таблица, в которой выполняется действие пользователя. В удаленных и вставленных таблицах хранятся старые значения или новые значения строк, которые могут быть изменены действием пользователя.

+0

, когда я использую вставленный, который не имеет результата – oebanez

+0

Имеет ли он результат без 'WHERE umur <27'? По возможности, поделитесь своим заявлением о вставке и значениями. –

+0

да, ты прав, сори для моего глупого. святое дерьмо – oebanez

0

Использование

Select noktb, tgl_lahir from inserted 

Если вы заинтересованы в вставляя на основе вновь введенных данных. Ваш выбор, кажется, способен возвращать многие элементы в его нынешнем виде, что объясняет «цикл»/дублирование.

Смежные вопросы