一、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
由于简要叙述视图触发器特点,故该案例从网上摘取
分享到:
相关推荐
在数据库设计中,主要对象包括表、视图、触发器、存储过程、序列、索引等。这些对象都是数据库设计的核心组件,各自扮演着不同的角色,以下是对每个对象的详细解释: 1. 表(Table) 表是数据库中最基本的存储结构...
### Sybase IQ 存储过程、视图及触发器语法详解 #### 存储过程 存储过程是在数据库中预编译的一系列SQL指令,能够通过单一的调用来执行复杂的操作,提高了性能并简化了应用程序的设计。 ##### 创建存储过程 创建...
在数据库管理领域,视图和触发器是两个重要的概念,它们在数据操作和信息处理中起着关键作用。本文将详细探讨"视图上触发器"以及"Materialized View(物化视图)",并结合提供的SQL脚本文件进行分析。 首先,视图是...
在数据库管理领域,视图、存储过程和触发器是三个重要的概念,它们在数据库设计和应用程序开发中扮演着至关重要的角色。特别是在Java Server Pages (JSP)开发中,理解并熟练运用这些技术能够提高应用程序的性能、...
在IT行业的数据库管理领域,视图、索引、存储过程和触发器是四个核心概念,它们各自发挥着关键作用,帮助提升数据库的性能、安全性和维护性。下面,我们将深入探讨这四个概念,并结合给定文件的部分内容进行具体分析...
数据库原理与应用是IT领域中的核心课程之一,其中视图和触发器是两个重要的概念,它们在数据库管理和数据处理中发挥着关键作用。 视图,简单来说,是数据库中的虚拟表,它并不实际存储数据,而是基于一个或多个表的...
这个“图书管理SQL大作业”着重于利用触发器和视图来优化数据库操作,提高系统的效率和完整性。下面我们将深入探讨这两个概念以及它们在图书管理中的应用。 首先,触发器(Triggers)是SQL中的一个特殊类型的存储...
在IT领域,数据库是存储和管理数据的核心工具。...例如,通过精心设计的索引和触发器,可以提高复杂查询的速度,同时使用视图来简化数据访问。这个压缩包中的资源将帮助你深入理解和实践这些数据库管理的关键技术。
6. 在实际应用中,我们可以设计自己的视图和触发器。例如,创建一个名为`customer_city_list`的视图,它关联`customer`、`address`、`city`和`country`四个表,展示每个客户ID对应的名字、住址的国家和城市。这有助...
博文中的测试数据库
语句触发器在对表或视图执行特定SQL语句时触发,行触发器则针对单行操作,而INSTEAD OF触发器可以在DML操作发生之前替代原操作执行。 总的来说,无论是电子电路中的触发器还是数据库中的触发器,它们都是为了实现...
本示例展示了如何利用触发器来实现对多表视图的更新,具体涉及了以下几个关键知识点: 1. **触发器的类型**: - 在SQL Server中,有DML(Data Manipulation Language)触发器和DDL(Data Definition Language)...
### SQL语句详解:创建数据库、表结构、视图及触发器 在IT行业中,数据库的设计与管理是一项至关重要的技能。SQL(Structured Query Language)作为处理关系型数据库的标准语言,在数据库设计与管理方面发挥着不可...
在数据库管理中,表、视图、存储过程和触发器是四大关键元素,它们共同构建了数据管理和交互的基础架构。下面将详细介绍这四个概念以及如何用代码创建它们。 1. **表的建立**:表是数据库中最基本的数据结构,用于...
在MySQL中,索引、视图、触发器、游标和存储过程是数据库设计和开发中经常使用的关键特性,它们极大地增强了数据库的功能和灵活性。 索引是数据库中用来快速寻找特定数据行的数据库对象。在MySQL中,索引可以极大地...
本资源“SQL语句大全”涵盖了多个关键概念,包括程序设计、视图、索引、游标、事务、触发器、锁、存储过程、XML以及权限管理。以下是对这些主题的详细阐述: 1. **程序设计**:T-SQL(Transact-SQL)是SQL Server中...
还要注意触发器的级联和递归问题,错误的触发器设计可能会导致意外的数据库操作。 综上所述,SQL Server 2008中的DML触发器是一个强大的工具,用于增强数据完整性和实现复杂的业务逻辑。设计和实现触发器时,需要...
"实验二 D 触发器的设计和仿真" 本实验报告主要介绍了异步清零的 D 触发器电路的设计和仿真过程。实验的目的是学习模拟数字电路单元的基本设计方法、Cadence 工具下的电路设计和 Sprectre 工具的仿真操作方法。 一...
触发器是一种特殊类型的存储过程,它被设计为在特定事件(如INSERT、UPDATE或DELETE操作)发生时自动执行。触发器可以用来强制业务规则、数据完整性,并且可以在表上执行自动操作。 **示例:** 在这个例子中,我们...