GPS平台、网站建设、软件开发、系统运维,找森大网络科技!
https://cnsendnet.taobao.com
来自森大科技官方博客
http://www.cnsendblog.com/index.php/?p=2064

创建和维护数据库
INSTEAD OF INSERT 触发器
可以在视图或表上定义 INSTEAD OF INSERT 触发器来代替 INSERT 语句的标准操作。通常,在视图上定义 INSTEAD OF INSERT 触发器以在一个或多个基表中插入数据。
视图选择列表中的列可为空也可不为空。如果视图列不允许为空,则 INSERT 语句必须为该列提供值。如果定义视图列的表达式包括以下项目,则视图列允许为空:
• 对任何允许为空的基表列的引用。
• 算术运算符。
• 对函数的引用。
• 具有可为空的子表达式的 CASE 或 COALESCE。
• NULLIF。
可以使用 COLUMNPROPERTY 函数报告的 AllowsNull 属性来确定视图列是否允许为空。sp_help 存储过程还报告哪些视图列允许为空。
引用具有 INSTEAD OF INSERT 触发器的视图的 INSERT 语句必须为每个不允许为空的视图列提供值。这包括引用不能为其指定输入值的基表列的视图列:
• 基表中的计算列。
• IDENTITY INSERT 为 OFF 的基表中的标识列。
• 具有 timestamp 数据类型的基表列。
如果 INSTEAD OF INSERT 视图触发器使用 inserted 表中的数据对基表生成 INSERT,则它应当通过排除 INSERT 语句选择列表中的列忽略这些类型的列值。INSERT 语句可为这些类型的列生成虚值。
例如,因为 INSERT 语句必须为映射到基表中标识列或计算列的视图列指定值,所以它可提供占位符值。INSTEAD OF 触发器在构成将值插入基表的 INSERT 语句时会忽略提供的值。
下面的语句创建表、视图和触发器,以解释这一过程:
CREATE TABLE BaseTable
(PrimaryKey int IDENTITY(1,1)
Color nvarchar(10) NOT NULL,
Material nvarchar(10) NOT NULL,
ComputedCol AS (Color + Material)
)
GO

–Create a view that contains all columns from the base table.
CREATE VIEW InsteadView
AS SELECT PrimaryKey, Color, Material, ComputedCol
FROM BaseTable
GO

–Create an INSTEAD OF INSERT trigger on the view.
CREATE TRIGGER InsteadTrigger on InsteadView
INSTEAD OF INSERT
AS
BEGIN
–Build an INSERT statement ignoring inserted.PrimaryKey and
–inserted.ComputedCol.
INSERT INTO BaseTable
SELECT Color, Material
FROM inserted
END
GO

直接引用 BaseTable 的 INSERT 语句不能为 PrimaryKey 和 ComputedCol 列提供值。例如:
–A correct INSERT statement that skips the PrimaryKey and ComputedCol columns.
INSERT INTO BaseTable (Color, Material)
VALUES (N’Red’, N’Cloth’)

–View the results of the INSERT statement.
SELECT PrimaryKey, Color, Material, ComputedCol
FROM BaseTable

–An incorrect statement that tries to supply a value for the
–PrimaryKey and ComputedCol columns.
INSERT INTO BaseTable
VALUES (2, N’Green’, N’Wood’, N’GreenWood’)

然而,引用 InsteadView 的 INSERT 语句必须为 PrimaryKey 和 ComputedCol 列提供值:
–A correct INSERT statement supplying dummy values for the
–PrimaryKey and ComputedCol columns.
INSERT INTO InsteadView (PrimaryKey, Color, Material, ComputedCol)
VALUES (999, N’Blue’, N’Plastic’, N’XXXXXX’)
–View the results of the INSERT statement.
SELECT PrimaryKey, Color, Material, ComputedCol
FROM InsteadView

传递到 InsteadTrigger 的 inserted 表由不可为空的 PrimaryKey 和 ComputedCol 列构成,所以引用该视图的 INSERT 语句必须提供那些列的值。值 999 和 N’XXXXXX’ 传递到 InsteadTrigger,但是触发器中的 INSERT 语句没有选择 inserted、PrimaryKey 或 ComputedCol,因此忽略该值。实际插入 BaseTable 的行在 PrimaryKey 中有 2,在 ComputedCol 有 N’BluePlastic’。
在表上指定的 INSTEAD OF INSERT 触发器和在视图上指定的 INSTEAD OF 触发器,其 inserted 表中包含的计算列、标识列和 timestamp 列的值不同。

基表列
表上任何 INSERT 触发器的 inserted 表中的值 视图上 INSTEAD OF INSERT 触发器 inserted 表中的值
是计算列。 计算表达式 用户指定值或 NULL
具有 IDENTITY 属性。 如果 IDENTITY_INSERT 为 OFF 则为 0,如果 IDENTITY_INSERT 为 ON 则为指定值 用户指定值或 NULL
具有 timestamp 数据类型。 若该列不允许空值则为二进制零,若该列允许空值则为 NULL 用户指定值或 NULL

直接引用基表的 INSERT 语句不必为同样具有 DEFAULT 定义的 NOT NULL 列提供值。如果 INSERT 语句不提供值,则使用默认值。然而,如果含有 DEFAULT 定义的 NOT NULL 列由含有 INSTEAD OF INSERT 触发器的视图中的简单表达式引用,则任何引用该视图的 INSERT 语句必须提供列值。该值对于生成传递给触发器的 inserted 表是必需的。对发信号通知触发器应使用默认值的值必须有相应的规则。最好的规则是让 INSERT 语句提供默认值。
INSTEAD OF INSERT 触发器的 deleted 表总是空的。

GPS平台、网站建设、软件开发、系统运维,找森大网络科技!
https://cnsendnet.taobao.com
来自森大科技官方博客
http://www.cnsendblog.com/index.php/?p=2064

Instead Of Insert触发器相关推荐

  1. mysql insert锁 innodb_mysql – 处理ON INSERT触发器时如何锁定innodb表?

    我有两个innodb表: 用品 id | title | sum_votes ------------------------------ 1 | art 1 | 5 2 | art 2 | 8 3 ...

  2. sql server 的after触发器之insert触发器实例

    after触发器,就是在insert.update.delete操作之后触发的触发器: 这种触发器是建立在表上: 现有2个表如下: 用如下图语句创建触发器:含义是,在pptest1表上创建触发器,当p ...

  3. Oracle获取insert的值,在Oracle中,如何从AFTER INSERT触发器获取插入的主键值?

    我的Oracle数据库有一个表 DOC_WF_COMM 它的主键是 DWFC_ID SQ_DOC_WF_COMM . 我已经创建了行级别 AFTER INSERT 在该表上和触发器内部,我需要将插入的 ...

  4. oracle insert 触发器无效_分享一个超实用的Zabbix监控Oracle用户无效对象手册

    一.Oracle客户端配置 1.创建脚本invalid_object_check.sh SQL语句查询无效对象,首先创建一个获取无效对象信息的原始脚本/etc/zabbix/scripts/inval ...

  5. SQL server触发器中 update insert delete 分别给写个例子被。

    SQL server触发器中 update insert delete 分别给写个例子以及解释下例子的作用和意思被, 万分感谢!!!! 主要想知道下各个语句的书写规范. INSERT: 表1 (ID, ...

  6. mysql 触发器不能同时 insert or update or delete_MySQL6:触发器

    什么是触发器 MySQL的触发器(trigger)和存储过程一样,都是嵌入到MySQL中的一段程序.触发器是由事件来触发某个操作,这些事件包括INSERT.UPDATE和DELETE语句.如果定义了触 ...

  7. oracle 触发器 insert 前检查_一文看懂INSTEAD OF 与AFTER 触发器区别与联系

    概述 最近在写触发器时碰到一个报错,简单记录如下:报错信息: > [42000] [Microsoft][SQL Server Native Client 10.0][SQL Server]不能 ...

  8. mysql insert update 同时执行_MySQL进阶三板斧(三)看清“触发器 (Trigger)”的真实面目

    触发器(Trigger)的起源 MySQL是最受欢迎的开源RDBMS,被社区和企业广泛使用.触发器是MySQL在5.0.1(开天辟地一版本)中增加的三大新功能之一,另外两个师兄弟是视图(view)与存 ...

  9. sql触发器(insert,update,delete)

    --insert 触发器 create trigger tri_insert on student --将要进行更改的表名 for insert --给表插入一条数据的时候触发 as declare ...

最新文章

  1. Mybatis入门:1(Mybatis框架的环境搭建)
  2. 附录6:TensorFlow基础(二)
  3. 日程来了!2021年佛山敏捷之旅暨第1届佛山DevOps社区Meetup
  4. java编程语言大全_JAVA编程语言的基础知识(一)
  5. 小强升职记梗概_时间管理法 ——《小强升职记》读书笔记 1
  6. 搜集的一些有意思的牛人博客地址
  7. ffmpeg实战教程(七)Android CMake avi解码后SurfaceView显示
  8. 化身阿凡达,国外小哥开源 AI 实时变脸工具 Avatarify
  9. rac one node在线relocation
  10. WCF与AJAX编程开发实践(2):支持ASP.NET AJAX的Web Service
  11. IE6利用iframe遮挡 弹层 select
  12. 10. Django基础:静态文件
  13. 2020美赛B题题目及解题思路
  14. mitmproxy工具使用小红书数据抓取
  15. 【Twitter 舆论分析】Twitter 爬虫绕过API限制
  16. mui 控制旋转屏幕方向
  17. Python学习笔记(基础知识第三篇:列表、元组、字典、集合)
  18. 无情刀永不知错,无缘分只叹奈何
  19. 推荐系统从入门到接着入门
  20. 控制器设计与仿真 实验计算机组成,计算机组成原理——微程序控制器实验

热门文章

  1. HTML5学习笔记(2020年11月)
  2. 摩托罗拉v8能玩java_拯救湿水V8大行动!小伟玩机之:摩托罗拉V8拆解
  3. 末日边境_永恒的末日是变相的第一人称黑暗灵魂
  4. Oralce 11g 恢复 .dmp 文件方法及过程
  5. Linux过来人帮你理清学习思路
  6. JSfunction参数设计的初衷
  7. VBA基础知识整理(文本文件操作)
  8. 风和日丽,幸福如草场广袤无边
  9. 界面劫持与反界面劫持
  10. 中国民航飞行学院人事薪资管理系统实践案例