2013-09-01 2 views
2

Я пытаюсь найти пример того, как обновить представление для нескольких таблиц, используя вместо триггера.Вместо триггера для обновления вида с несколькими таблицами

То есть я хочу обновить более одной таблицы, из которой выбирается этот вид.

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

+1

Что СУБД (SQL Server, Oracle, Postgres, ...) вы используете? – peterm

ответ

3

Предполагая, что вы используете 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 демо

+0

Спасибо большое. Можете ли вы объяснить мне, каковы последствия этого утверждения, а не строки? – TheWommies

+0

@AllenHo Вы вполне приветствуетесь :) Вся ваша обработка в триггере должна быть установлена ​​ориентированной. Вы не можете рассчитывать на то, что вы получите только одну строку в виртуальных таблицах (вставленных, удаленных) для обработки. – peterm

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