2
A
回答
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
相关问题
- 1. 而不是触发器更新主键
- 2. 用触发器更新多个表
- 3. 从控制器更改视图不触发视图更新
- 4. SQL触发器更新视图中的多个列
- 5. 如何更新SQL Server表而不触发UPDATE触发器
- 6. 而不是更新触发视图不会自动触发,除非手动更新查看
- 7. 创建INSERT触发器更新CreatedBy和UpdatedBy而不触发相同表上的更新触发器
- 8. MySQL:触发条款“而不是更新”
- 9. 而不是更新触发位列
- 10. SQL的,而不是在basetable触发犯规触发从视图
- 11. 更新触发器是否更新其自己的表,调用触发器?
- 12. 多行更新触发器
- 13. 多行更新触发器
- 14. ,而不是在视图中的SQL Server INSERT触发器
- 15. 通过触发器更新多个行
- 16. EF4 RowCount问题,而不是插入触发器,而更新其他表
- 17. Databaselink&而不是触发器
- 18. 触发器更新表
- 19. 间接更新视图内容时触发不会触发
- 20. 更新表后触发器不工作
- 21. SQL触发器不工作/更新表
- 22. 运行MYSQL触发器,不更新表
- 23. MySQL触发器不更新表
- 24. Oracle触发器,而不是更新和ORA-22816错误
- 25. 引用where子句而不是更新触发器
- 26. 触发器每次更新而不是只有一列
- 27. 触发器更新另一个表
- 28. 触发器更新另一个表
- 29. SQL触发器更新另一个表
- 30. 最近更新的多个表的触发器
什么RDBMS(SQL服务器,Oracle,Postgres的,...)您使用的? – peterm