2014-11-25 2 views
1

У меня есть опыт работы с Oracle PL/SQL, и теперь я изучаю MS SQL. я наткнулся на следующую ситуацию:MS SQL: не запускается триггер «INSTEAD OF INSERT»?

При вставке в таблице значения должны быть вставлены в Columna автоматически должны были быть переписаны для MAX (Columna) + 1

В Oracle я бы легко сделать это с Триггер «Перед вставкой».

В MS Sql кажется, что перед этим следует эмулировать триггер «Вместо вставки».

Мой вопрос: Скажем, я пишу новую инструкцию Insert, содержащую max + 1 для этого столбца A в «Вместо триггера вставки».

Если в какой-то более поздний момент времени столбец добавляется к таблице, моя вставка запроса в триггере не будет иметь эту колонку, если кто не помнит, чтобы обновить спусковой крючок, а ..

Является ли это правильно предположение?

Есть ли лучший способ достичь этого?

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

+0

почему не столбец идентификации, или [последовательность] (http://msdn.microsoft.com/en-us/library/ff878091 (v = sql.110) .aspx) – tschmit007

+0

@ tschmit007: Я согласен, но допустим, что с этой колонкой происходят другие манипуляции. Последовательность будет «десинхронизирована». Насколько я знаю, столбец идентификатора нельзя изменить. Я хотел бы продолжать использовать триггеры. – Bjorn

+0

Так вы пробовали добавить новый столбец? – Paparazzi

ответ

1

Очевидно, что если у вас есть ВСТАВКУ ВМЕСТО триггер с:

INSERT INTO таблицы (columnnames) VALUES (значения)

, а затем добавить новый столбец в таблице, любая вставка будет fail, потому что вместо вставки не упоминаются все столбцы.

«Название столбца или количество заданных значений не соответствует определению таблицы».

Я предположил, что этого не произойдет, если новый столбец допускает нулевые значения, моя ошибка.

Благодаря @Blam заставила меня сомневаться в себе :)

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