SQL триггер не работает, как ожидалось - PullRequest
2 голосов
/ 28 мая 2011

при добавлении одной строки в таблицу клиентов следует:

  • скопировать в другую таблицу с именем new_customer table
  • удалить строку в таблице клиентов.

В таблице клиентов есть только одно поле, это номер телефона.

Это поле должно быть скопировано в новую таблицу клиентов и должно быть удалено из таблицы клиентов.

, пожалуйста, кто-нибудь может сказать мне, что не так с этим триггером .....

CREATE TRIGGER update_cus
ON customer
FOR update AS
   IF (COLUMNS_UPDATED() & 1) > 0
      BEGIN

      INSERT INTO new_customer
         (Phone number
            )
         SELECT 'NEW',
            ins.Phone number
         FROM inserted ins

         SELECT 'OLD', 
            del.Phone number
         FROM deleted del

   END

Ответы [ 2 ]

2 голосов
/ 28 мая 2011

Мое предположение

CREATE TRIGGER update_cus
ON customer
FOR update AS
   IF EXISTS (SELECT * FROM INSERTED)
   BEGIN

      INSERT INTO new_customer ([Phone number])
         SELECT 'NEW', ins.[Phone number]
         FROM inserted ins

      DELETE customer WHERE
         [Phone number] IN (SELECT [Phone number] FROM deleted)

   END
1 голос
/ 28 мая 2011

Вы хотите поведение для ВСТАВКИ, но определили триггер для ОБНОВЛЕНИЯ.

В INSERT указано одно поле, но вы пытаетесь вставить 2 значения.

Вы заявляете, что хотите УДАЛИТЬ запись от клиента, но не имеете оператора УДАЛИТЬ.


Я воздержался от написания другого триггера для вас, потому что на самом деле я не уверен на 100%, чего вы пытаетесь достичь.

Не могли бы вы привести примеры, в том числе как должны выглядеть различные таблицы до и после различных действий?

EDIT

CREATE TRIGGER update_cus
ON customer
FOR insert AS
BEGIN

  INSERT INTO new_customer (name, id)
  SELECT name, id
  FROM inserted

  DELETE customer WHERE
  id IN (SELECT id FROM deleted)
  -- This assumes id is Unique, but as the table should normally be empty, that's fine.

END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...