sql- вместо триггера не запускает на basetable из вида - PullRequest
0 голосов
/ 23 июня 2011

Когда новые данные вставляются в BASETABLE Я хочу, чтобы он сделал триггер View ( ВместоView ) для вставки данных в другую таблицу.Это работает только когда я вставляю данные вручную в представление, но не когда я вставляю данные в Базовую таблицу.

CREATE TABLE BaseTable
  (PrimaryKey     int PRIMARY KEY IDENTITY(1,1),
   Color          nvarchar(10) NOT NULL,
   Material       nvarchar(10) NOT NULL,
   ComputedCol AS (Color + Material)
  )
GO

--Create a view that contains all columns from the base table.
CREATE VIEW InsteadView
AS SELECT PrimaryKey, Color, Material, ComputedCol
FROM BaseTable
GO

--Create an INSTEAD OF INSERT trigger on the view.
CREATE TRIGGER InsteadTrigger on InsteadView
INSTEAD OF INSERT
AS
BEGIN
  --Build an INSERT statement ignoring inserted.PrimaryKey and 
  --inserted.ComputedCol.
  INSERT INTO anotherTable
       SELECT Color, Material
       FROM inserted
END
GO

INSERT INTO BaseTable (Цвет, Материал) ЗНАЧЕНИЯ (N'Red ', N'Cloth')

- просмотр результатов оператора INSERT.ВЫБЕРИТЕ PrimaryKey, Color, Material, ComputedCol ИЗ другой таблицы

1 Ответ

3 голосов
/ 23 июня 2011

Это работает, как задумано.Чтобы сформулировать вашу проблему в терминах, не связанных с базой данных: «Я электрифицировал переднюю дверную ручку, но всякий раз, когда я захожу через заднюю дверь, меня не шокирует, только когда я захожу через переднюю дверь».Если вы хотите получить такой же удар, когда вы открываете заднюю дверь, то электрифицируйте ее тоже.

Триггер определен в представлении, поэтому, когда вы вставляете в него данные, он срабатывает.На базовой таблице ничего не определено, поэтому триггеры не запускаются.Помещение вместо базового триггера в базовую таблицу приведет к выталкиванию данных в альтернативную таблицу, но тогда вы никогда не попадете в нее (если вы не выполните какой-то кровавый хак, например добавьте еще один столбец и сделаете условную логику, основанную на значении).

...