而不是触发器用多个表更新视图

时间:2013-09-01 06:38:43

标签: sql-server view triggers sql-update

我试图找到一个如何使用而不是触发器来更新多个表的视图的示例。

那就是我想要更新这个视图选择的多个表。

我找不到任何例子。如果有人能告诉我如何做到这一点会很棒。

1 个答案:

答案 0 :(得分: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');

注意:实际上,您肯定必须处理IDENTITY列以及SQL Server中的触发器是语句而非行范围的事实。

这是 SQLFiddle 演示