一、INSTEAD OF 触发器的主要优点:
1.可以使不能更新的视图支持更新。基于多个基表的视图必须使用 INSTEAD OF 触发器来支持引用多个表中数据的插入、更新和删除操作。
2.使您得以编写这样的逻辑代码:在允许批处理的其他部分成功的同时拒绝批处理中的某些部分。
(对于含有使用 DELETE 或 UPDATE 级联操作定义的外键的表,不能定义 INSTEAD OF DELETE 和 INSTEAD OF UPDATE 触发器。)
二、案例分析:
创建两个基表、一个视图、一个记录重复数据的表和视图上的 INSTEAD OF 触发器。以下表将个人数据和业务数据分开并且是视图的基表。
CREATE TABLE Person
(
SSN char(11) PRIMARY KEY,
Name nvarchar(100),
Address nvarchar(100),
Birthdate datetime
)
CREATE TABLE EmployeeTable
(
EmployeeID int PRIMARY KEY,
SSN char(11) UNIQUE,
Department nvarchar(10),
Salary money,
CONSTRAINT FKEmpPer FOREIGN KEY (SSN)
REFERENCES Person (SSN)
)
下面的视图使用两个表中的关联数据建立报表。
CREATE VIEW Employee AS
SELECT P.SSN as SSN, Name, Address,
Birthdate, EmployeeID, Department, Salary
FROM Person P, EmployeeTable E
WHERE P.SSN = E.SSN
可记录对插入具有重复的社会保障号的行的尝试。PersonDuplicates 表记录插入的值、尝试插入的用户的姓名和插入的时间。
CREATE TABLE PersonDuplicates
(
SSN char(11),
Name nvarchar(100),
Address nvarchar(100),
Birthdate datetime,
InsertSNAME nchar(100),
WhenInserted datetime
)
INSTEAD OF 触发器将行插入到单个视图的多个基表中。在 PersonDuplicates 表中记录了插入具有重复社会保障号的行的尝试。EmployeeTable 中的重复行将更改为更新语句。
CREATE TRIGGER IO_Trig_INS_Employee ON Employee
INSTEAD OF INSERT
AS
BEGIN
SET NOCOUNT ON
-- Check for duplicate Person. If there is no duplicate, do an insert.
IF (NOT EXISTS (SELECT P.SSN
FROM Person P, inserted I
WHERE P.SSN = I.SSN))
INSERT INTO Person
SELECT SSN,Name,Address,Birthdate
FROM inserted
ELSE
-- Log an attempt to insert duplicate Person row in PersonDuplicates table.
INSERT INTO PersonDuplicates
SELECT SSN,Name,Address,Birthdate,SUSER_SNAME(),GETDATE()
FROM inserted
-- Check for duplicate Employee. If no there is duplicate, do an INSERT.
IF (NOT EXISTS (SELECT E.SSN
FROM EmployeeTable E, inserted
WHERE E.SSN = inserted.SSN))
INSERT INTO EmployeeTable
SELECT EmployeeID,SSN, Department, Salary
FROM inserted
ELSE
--If there is a duplicate, change to UPDATE so that there will not
--be a duplicate key violation error.
UPDATE EmployeeTable
SET EmployeeID = I.EmployeeID,
Department = I.Department,
Salary = I.Salary
FROM EmployeeTable E, inserted I
WHERE E.SSN = I.SSN
END
由于简要叙述视图触发器特点,故该案例从网上摘取
分享到:
相关推荐
图书管理触发器设计,视图,与“读者信息”相关的属性;与“书库信息”相关的属性;与“管理员信息”相关的属性希望对你有用
3、 在表或视图上,每个INSERT、UPDATE或DELETE语句只能创建一个INSTEAD OF类型的触发器,无法为有外键约束且指定为级联删除或级联修改的表创建DELETE或UPDATE语句上的INSTEAD OF 类型的触发器。 SQL SERVER为每个...
1.数据库对象设计 主要对象包括表、视图、触发器、存储过程、序列、索引等
基于sakila的触发器的设计 PDF中包括: 1. 观察 sakila.mwb 并回答问题 1.1图中共有几个 View 1.2分析以下 3 个视图,回答以下问题: 2.观察 sakila-schema.sql 和 sakila-data.sql 并回答问题 3.观察数据库的触发器...
博文中的测试数据库
详细讲解你:程序设计、视图、索引、游标、事务、触发器、锁、存储过程、XML、权限管理…… 并加以注释!
这是一个关于图书管理信息统的数据库的设计与实现,里面包括图书管理信息管理系统的需求分析,数据库设计的分析,数据表的建表、视图、存储过程、触发器、数据查询。内容详细,学习使用mysql的重要资料
深入学习SQLServer,毕业设计,论文答辩 ER模型,视图,表,存储过程,触发器,事务等的详细介绍
根据系统需求作必要的存储过程和触发器设计,本系统需要的存储过程和触发器设计。必要的存储过程和触发器设计都要写全说明,图可以是一个表的完整存储过程或触发器。 7.备份与恢复设计 根据系统需求作必要的备份与...
内容包括搭建ASP.NET开发环境、HTML开发与实践、CSS样式与JavaScript脚本应用、常用Web服务器控件、验证控件、高级Web服务器控件、ADO.NET技术、数据绑定技术、SQL查询相关技术、视图、存储过程及触发器的应用、ASP...
这是一个关于药品存销信息管理系统的数据库的设计与实现,里面包括药品存销信息管理系统的需求分析,数据库设计的分析,数据表的建表、视图、存储过程、触发器、数据查询。内容详细,学习使用mysql的重要资料
数据库设计 全部的视图 触发器 带有总结 20000字 全部论文排版要求 自动生成目录
基于SQL的教务管理系统开发。 目录 任务书 () 1. 需求调查、分析 () 1.1. 企业介绍 () ...5.5. 触发器设计 () 6. 数据库视图设计 () 7. 数据库存储过程设计 () 8. 权限设计 () 9. 总结 () 参考资料 ()
实验四 存储过程、触发器与索引 一、实验目的 1.熟悉大型数据库实验环境,以MS SQL...并设计不同的查询语句来观察索引对查询效率的影响;可以尝试将100万行记录扩展为1000万行,然后再做索引和查询的实验?文件见附件。
仓库管理的简介及理论需求分析,数据流程图,数据字典,全局ER图,局部ER图,关系模式,建库和建表的SQL语句,表的约束SQL语句,建视图的SQL语句,存储过程和触发器的SQL语句
Oracle数据库系统应用开发课程设计说明书,内含完整DFD图、视图设计、过程函数触发器设计以及主要操纵语句。
数据库操作与实施结果——数据库对象的设计 13 6.1建数据库——工资管理库 13 6.2 建表 13 6.3创建视图 16 6.4 触发器 16 6.5 建立索引 17 7.运行和维护 18 7.1简单查询 18 7.2复杂查询 19 7.3数据库的用户与权限...
第一章 绪论 1.1课题简介 1.2设计目的 1.3设计内容 第二章 需求分析 2.1 需求分析的任务 2.2 需求分析的过程 ...6.2触发器的设计 6.3表的建立与数据的载入 6.4 数据库的运行 总 结 参考文献
医药销售管理系统【SQLServer数据库+课程设计文档】 1.需求分析 1.1系统目标与要求 1.2系统分析 2.系统逻辑方案 2.1数据流程图(DFD): 2.2数据字典(简称DD) ...5.6建立触发器 6课程设计小结 7参考文献
(1)根据系统功能需求设计相应的查询视图 (2)要求根据系统功能需求建立存储过程 (3)根据功能需求建立相应的触发器以保证数据的一致性 (4)通过建立用户和权限分配实现数据库一定的安全性,考虑数据库的备份与...