代替触发更新具有多个表的视图

The*_*ies 4 sql-server triggers view sql-update

我正在尝试找到一个示例,该示例如何使用一个代替触发器来更新多个表上的视图。

那就是我要更新此视图从中选择的多个表。

我找不到任何例子。如果有人可以告诉我如何做到这一点,那就太好了。

pet*_*erm 5

假设您正在使用SQLServer,这是一个过于简化的示例

CREATE TABLE persons
(personid  int, 
 firstname varchar(32), 
 lastname  varchar(32));

CREATE TABLE employees
(employeeid int, 
 personid   int, 
 title      varchar(32));

CREATE VIEW vwEmployees AS
SELECT p.personid, employeeid, firstname, lastname, title
  FROM employees e JOIN persons p
    ON e.personid = p.personid;

CREATE TRIGGER tgEmployeesInsert ON vwEmployees
INSTEAD OF INSERT AS
BEGIN
  INSERT INTO persons (personid, firstname, lastname)
  SELECT personid, firstname, lastname
    FROM INSERTED

  INSERT INTO employees (employeeid, personid, title)
  SELECT employeeid, personid, title
    FROM INSERTED
END;

INSERT INTO vwEmployees (personid, employeeid, firstname, lastname, title)
VALUES(1, 1, 'Jhon', 'Doe', 'SQL Developer');
Run Code Online (Sandbox Code Playgroud)

注意:实际上,您肯定会不得不处理IDENTITY列,并且SQL Server中的触发器是语句而不是行范围的事实。

这是SQLFiddle演示