triggerdemo11.sql
来自「T-SQL示例大全」· SQL 代码 · 共 68 行
SQL
68 行
/*
文件名称: TriggerDemo11.sql
目 的: 使用 INSTEAD OF 触发程序去防止发生违反条件约束的事情
*/
USE 北风贸易
GO
if exists (select * from dbo.sysobjects where id = object_id(N'MyTable') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table MyTable
GO
CREATE TABLE MyTable
(
编号 nchar(5) NOT NULL PRIMARY KEY CLUSTERED,
姓名 nvarchar(12) NOT NULL ,
薪资 money NOT NULL
)
GO
-- 为 MyTable 数据表建立一个 CHECK 条件约束
ALTER TABLE MyTable WITH NOCHECK ADD
CONSTRAINT CK_MyTable_薪资 CHECK (薪资 >= 15000 and 薪资 <= 120000)
GO
-- 为 MyTable 数据表建立一个由新增作业引发执行的触发程序
CREATE TRIGGER InsertTriggerOfMyTable ON MyTable
INSTEAD OF INSERT
AS
DECLARE @TmpTable TABLE (
编号 nchar(5),
姓名 nvarchar(12) ,
薪资 money
)
INSERT @TmpTable SELECT * FROM inserted
-- 将低于下限值的薪资设定成下限值,
-- 并将高于上限值的薪资设定成上限值
UPDATE @TmpTable SET 薪资 =
CASE WHEN 薪资< 15000 THEN 15000
WHEN 薪资> 120000 THEN 120000
ELSE 薪资
END
INSERT MyTable SELECT * FROM @TmpTable
GO
/*--------------- 开始新增数据记录 ---------------*/
SET NOCOUNT ON
INSERT MyTable VALUES ('A0001','章立民',30000)
GO
-- 虽然这个数据违反薪资的条件约束(低于下限值),但是
-- 通过 INSTEAD OF 触发程序的处理,所以仍然会被新增
INSERT MyTable VALUES ('A0002','洪志豪',0)
GO
-- 虽然这个数据违反薪资的条件约束(高于上限值),但是
-- 通过 INSTEAD OF 触发程序的处理,所以仍然会被新增
INSERT MyTable VALUES ('A0003','刘大胜',3000000000)
GO
-- 查看数据表 MyTable 的数据记录
SELECT * FROM MyTable
GO
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?