SQL Server游标中的inserted和deleted临时表

SQL Server触发器实战:基于AFTER触发器实现数据同步与审计 数据库触发器是一种在指定表发生数据变动时自动执行的特殊存储过程,是实现数据一致性与自动化逻辑的关键机制。其核心原理在于监听INSERT、UPDATE、DELETE事件,并通过访问inserted和deleted虚拟表来精准捕获变化的数据行。这一技术价值在于将数据同步、审计追踪等逻辑内置于数据库层,确保操作的原子性与强一致性,有效替代了易出错的手动编码。在数据仓库ETL、实时审计日志、业务状态同步等场景中应用广泛。本文聚焦于利用SQL Server的AFTER触发器,详细阐述如何设计一个可靠的、基于虚拟表的增 阅读详情

触发器语句中使用了两种特殊的表:deleted 表和 inserted 表。Microsoft? SQL Server 2000 自动创建和管理这些表。可以使用这两个临时的驻留内存的表测试某些数据修改的效果及设置触发器操作的条件;然而,不能直接对表中的数据进行更改。

  inserted和deleted表主要用于触发器中:

  ·扩展表间引用完整性

  ·在以视图为基础的基表中插入或更新数据

  ·检查错误并基于错误采取行动

  找到数据修改前后表状态的差异,并基于此差异采取行动。

  Deleted表用于存储DELETE和UPDATE语句所影响的行的复本。在执行DELETE或UPDATE语句时,行从触发器表中删除,并传输到deleted表中。Deleted表和触发器表通常没有相同的行。

  Inserted表用于存储INSERT和UPDATE语句所影响的行的副本。在一个插入或更新事务处理中,新建行被同时添加到inserted表和触发器表中。Inserted表中的行是触发器表中新行的副本。

  更新事务类似于在删除之后执行插入;首先旧行被复制到 deleted 表中,然后新行被复制到触发器表和 inserted 表中。

  在设置触发器条件时,应当为引发触发器的操作恰当使用 inserted 和 deleted 表。虽然在测试 INSERT 时引用 deleted 表或在测试 DELETE 时引用 inserted 表不会引起任何错误,但是在这种情形下这些触发器测试表中不会包含任何行。

  说明:如果触发器操作取决于一个数据修改所影响的行数,应该为多行数据修改(基于 SELECT 语句的 INSERT、DELETE 或 UPDATE)使用测试(如检查 @@ROWCOUNT),然后采取相应的对策。

  SQL Server? 2000 不允许 AFTER 触发器引用 inserted 和 deleted 表中的 text、ntext 或 image 列;然而,允许 INSTEAD OF 触发器引用这些列。有关更多信息,请参见 CREATE TRIGGER。

  在 INSTEAD OF 触发器中使用 inserted 和 deleted 表

  传递到在表上定义的 INSTEAD OF 触发器的 inserted 和 deleted 表遵从与传递到 AFTER 触发器的 inserted 和 deleted 表相同的规则。inserted 和 deleted 表的格式与在其上定义 INSTEAD OF 触发器的表的格式相同。inserted 和 deleted 表中的每一列都直接映射到基表中的列。

  有关引用带 INSTEAD OF 触发器的表的 INSERT 或 UPDATE 语句何时必须提供列值的规则与表没有 INSTEAD OF 触发器时相同:

  不能为计算列或具有 timestamp 数据类型的列指定值。

  不能为具有 IDENTITY 属性的列指定值,除非该列的 IDENTITY_INSERT 为 ON。当 IDENTITY_INSERT 为 ON 时,INSERT 语句必须提供一个值。

  INSERT 语句必须为所有无 DEFAULT 约束的 NOT NULL 列提供值。

  对于除计算列、标识列或 timestamp 列以外的任何列,任何允许空值的列或具有 DEFAULT 定义的 NOT NULL 列的值都是可选的。

  当INSERT、UPDATE 或 DELETE 语句引用具有 INSTEAD OF 触发器的视图时,数据库引擎将调用该触发器,而不是对任何表采取任何直接操作。即使为视图生成的 inserted 和 deleted 表中的信息格式与基表中的数据格式不同,该触发器在生成执行基表中的请求操作所需的任何语句时,仍必须使用 inserted 和 deleted 表中的信息。

  传递到在视图上定义的 INSTEAD OF 触发器的 inserted 和 deleted 表格式与为该视图定义的 SELECT 语句的选择列表相匹配。例如:

  CREATE VIEW EmployeeNames (EmployeeID, LName, FName)

  AS

  SELECT EmployeeID, LastName, FirstName

  FROM Northwind.dbo.Employees

  视图的结果集有三列:一个 int 列和两个 nvarchar 列。传递到在视图上定义的 INSTEAD OF 触发器的 inserted 和 deleted 表也具有名为 EmployeeID 的 int 列、名为 LName 的 nvarchar 列和名为 FName 的 nvarchar 列。

  视图的选择列表还包含不直接映射到单个基表列的表达式。一些视图表达式(如常量调用或函数调用)可能不引用任何列,这类表达式会被忽略。复杂的表达式会引用多列,但在 inserted 和 deleted 表中,每个插入的行仅有一个值。如果视图中的简单表达式引用具有复杂表达式的计算列,则这些简单表达式也有同样的问题。视图上的 INSTEAD OF 触发器必须处理这些类型的表达式。有关更多信息,请参见视图上 INSTEAD OF 触发器中的表达式和计算列。

  顺便说一下,当对某张表建立触发器后,分3种情况讨论

  1.插入操作(Insert)

  Inserted表有数据,Deleted表无数据

  2.删除操作(Delete)

  Inserted表无数据,Deleted表有数据

  3.更新操作(Update)

  Inserted表有数据(新数据),Deleted表有数据(旧数据)

游标脚本性能问题解决与分析 (4) - Cursor Performance Analysis 第四部分、游标相关知识讲解 (一)Fast Forward Only(快速只进)游标分析 Microsoft SQL Server 实现了一种称作fast forward only游标的性能优化。http://msdn.microsoft.com/zh-cn/library/ 阅读详情

相关推荐

SQL Inserted和deleted详解

SQL Inserted和deleted详解

sqlserver触发器的使用以及inserted和deleted详解

触发器是在对表进行插入、更新或删除操作时自动执行的特殊存储过程。触发器通常用于强制业务规则,触发器是一种高级约束,可以定义比CHECK约束更为复杂的约束:可以执行复杂的SQL语句(if/while/case),可以引用其他表中的列。触发器定义在特定的表上,与表相关,自动触发执行,不能直接调用,是一个事务(可回滚)。

Java领域 1万+

骁龙X Elite笔记本重装Windows 11 Arm64系统完整指南与避坑手册

UEFI安全启动和Arm64架构是理解现代计算设备系统部署的基础。UEFI取代传统BIOS,提供了更安全的启动环境和模块化固件接口,而Arm64架构则以其高能效特性,在移动和新兴PC领域日益重要。其技术价值在于为设备带来更快的启动速度、更强的安全防护以及更优的功耗表现。在应用场景上,这直接关系到搭载高通骁龙X Elite等Arm处理器的笔记本电脑的系统安装与维护。对于这类设备,重装系统远非插入通用安装盘那么简单,核心挑战在于必须使用专为Arm64编译的Windows镜像,并需提前集成芯片组、网络等硬件的专属

weixin_33428613的博客 479

SQL server触发器 inserted表和deleted表用法

inserted表和deleted表用于存放对表中数据行的修改信息,他们是触发器执行时自动创建的,放在内存中,是临时表。当触发器工作完成,它们也被删除。它们是只读表,不能向它们写入内容。 inserted表:用来存储INSERT和UPDATE语句所影响的行的副本。意思就是在inserted表中临时保存了被插入或被更新后的记录行。在执行 INSERT 或UPDATE 语句时,新加行被同时添加到ins...

weixin_43494908的博客 1万+

汽车诊断之UDS入门-0x19 0x0A服务

0x19 0x0A解析

weixin_44842720的博客 3836

基于CAT的VBM和SBM计算学习笔记(二)感兴趣区(ROI)&全脑体积(TIV)

本文介绍了用cat12运算VBM前,如何抓取ROI信息;运算VBM后,如何转化ROI文件和提取全脑体积,为之后的统计分析做好准备。t=N7T8基于CAT的VBM和SBM计算学习笔记(一)VBMhttps://mp.youkuaiyun.com/mp_blog/creation/editor/140665644。

Rose9614的博客 4358

inserted与deleted表

触发器语句中使用了两种特殊的表:deleted 表和 inserted 表。Microsoft® SQL Server 2000 自动创建和管理这些表。可以使用这两个临时的驻留内存的表测试某些数据修改的效果及设置触发器操作的条件;然而,不能直接对表中的数据进行更改。   inserted 和 deleted 表主要用于触发器中:   扩展表间引用完整性。   在以视图为基础的基

云海唯C的专栏 1507

【故障处理】- ORA-01722

在执行升级脚本@?/rdbms/admin/catupgrd.sql时报错ora-01722。

weixin_39099660的博客 855

sqlserver触发器案例 insertd

说明:当系统做insert插入操作的时候,更新插入进来的立账日期,信用日期, 销售发票没有主键PK,有FK外键,这里就不能通过反查id来获取刚刚插入的xxid 1.反查id方法: select @@identity; select ident_current(tablename); select SCOPE_IDENTITY(); 三种区别如下: @@IDENTITY 得到的是跨域最新id ...

weixin_43494908的博客 5995

从零实现高精度手势检测:OpenCV+MediaPipe模型移植实战(2)(附c++完整代码)

上篇已经介绍了手掌检测的方法。本章将在手掌检测的基础上,完成手指关节的检测。

qq_37160641的博客 2665

如何使用 Python 爬虫获取猫眼电影数据:电影评分与评论分析

随着互联网的快速发展,越来越多的人开始使用各种在线平台来了解电影信息,猫眼电影作为一个非常流行的在线电影票务平台,提供了详细的电影评分、评论和票房数据。本篇博客将详细介绍如何使用 Python 爬虫技术获取猫眼电影平台上的电影数据,重点关注电影评分和用户评论的爬取,分析其背后的数据处理和反爬虫技术。如果你对数据分析、电影评论分析等话题感兴趣,可以根据本文的示例进一步深入挖掘更多的数据,为决策提供支持,或为电影产业的相关研究提供有价值的分析依据。有些猫眼电影的页面数据是动态加载的,使用。

2201_76125261的博客 1623

sqlserver在触发器中执行动态sql用到inserted(deleted)表

这两天公司产品中要加个数据同步用的触发器,oracle版没什么问题,很顺利的写完了。       在写sqlserver版时遇到了麻烦。由于在触发器中要根据inserted(deleted)表的数据,对另一个表进行更新操作,而这个表的某些字段是不固定的,所以需要写成动态sql,利用exec来执行。这时麻烦来了,exec执行时,无法访问到inserted(deleted)表。坏了,这该如何是好?

3841

32、社交媒体大数据中的情感分析与网络欺凌检测

本文探讨了社交媒体大数据在情感分析和网络欺凌检测中的应用。情感分析有助于应对自动化带来的社会变化、促进社会包容和推动环境保护。网络欺凌作为一种严重的在线危害,其检测依赖于数据预处理、特征提取与深度学习模型(如CNN、LSTM)进行分类。文章还总结了大数据在欺诈检测、医疗、制造、交通等领域的广泛应用,并分析了数据存储、处理速度、质量和技术工具等方面的挑战,提出了相应的应对策略。未来,随着技术进步,社交媒体大数据将在更多领域发挥关键作用。

cc789的博客 91

SQL SERVER 行级触发器(准)

SQL SERVER  准行级触发器ⅰDeleted表和Inserted表   SQL SERVER只有表级和服务器级(相当)的触发器,在很多需要使用行级触发器的场合,很多同事都开始怀念使用Oracle的日子。但是事实上,我认为SQL SERVER这样做有它的理由(或难处),甚至于很多时候我会说,我们不需要精细到以行来触发的操作,因为我们往往要做的是处理哪些数据而不是哪条数据。不过如果您真

劳动公社 7911

Debian Buster 软件源失效问题

摘要:基于Debian Buster的ARM64设备因系统版本结束支持(EOL)导致apt update报错404。解决方案包括:1)改用Debian官方存档源(需禁用安全检查);2)升级至受支持的Debian 11/12版本(推荐);3)临时使用第三方镜像源(不推荐)。操作步骤涉及修改sources.list、处理NTP同步问题及清理残留配置。建议优先采用版本升级方案以获得持续安全更新,避免使用过时系统带来的安全隐患。文中提供了完整命令示例和操作记录供参考。

yy_xzz的博客 2179

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

存储过程、用户定义函数、触发器和游标

用户定义函数与编程语言中的函数类似,其结构与存储过程类似,但函数必须有一个 RETURN 子句,用于返回函数值。函数说明要指定函数名、结果值的类型、以及参数类型等。SQL Server 2008 支持两类用户定义函数:标量函数和表值函数,标量函数只返回单个数据值,表值函数将返回一个表。表值函数又分为内联表值函数和语句表值函数。[,...n ][AS]BRGINEND删除函数使用 DROP FUNCTION 语句实现,它从当前数据库中删除一个或多个用户定义函数。

Miss Z的博客 254

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

触发器记录日志变更

USE [MSCRM_MSCRM] GO /****** Object: Trigger [dbo].[T_Sohu_Update_New_personaltaskExtensionBase] Script Date: 03/24/2011 20:26:43 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO...

weixin_30530523的博客 118

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

SQL Server触发器实战:基于UPDATE与INSERT实现库存数据自动同步

在数据库系统中,触发器是一种重要的自动化机制,它能在数据发生变更时自动执行预定义的操作。其工作原理类似于条件反射,当绑定的表发生INSERT、UPDATE或DELETE事件时,数据库会立即响应,通过访问inserted和deleted这两个关键临时表来捕获变化前后的数据状态。这一机制的核心技术价值在于将数据一致性的维护逻辑从应用层下沉至数据库层,从而提升系统的可靠性与内聚性。在工程实践中,触发器常被用于实现跨表数据同步、审计日志记录和实时汇总计算等场景。例如,在库存管理系统中,通过创建AFTER UPDAT

weixin_34221276的博客 367

SQL Server触发器实战:基于集合操作实现高效数据同步

在数据库系统中,触发器是一种重要的数据库对象,它能在数据发生变更时自动执行预定义的操作,是实现数据一致性与业务规则自动化的核心技术。其原理基于对DML操作事件的监听,通过inserted和deleted两个临时逻辑表捕获变更前后的数据状态。从技术价值看,触发器将业务逻辑内聚于数据库层,减少了应用代码的复杂性,并能在事务内保证操作的原子性。在应用场景上,它广泛用于实时数据同步、审计日志记录、库存联动更新等需要强一致性的场合。本文以订单与库存同步为例,深入解析如何利用AFTER触发器结合MERGE语句,通过基于

weixin_30448603的博客 318

一周速学SQL Server(第五天)

一周速学SQL Server(第五天)

beiye_的博客 753

SQL SERVER-10-触发器|游标|动态sql

1.触发器 --可以理解为一个特殊的存储过程,在某一个动作执行的时候,自动执行,而不需要人手动执行 --触发器的分类 --1.DML触发器 --insert,delete,update(不支持select) --after触发器,instead of 触发器(相当于其他数据库的before触发器,是一个替代),(不支持before触发器) --2.DDL触发器 --create table,...

m0_37532448的博客 904

SQL server游标

# SQL server游标 update触发器只会被update触发一次,无论更新的记录数是多少,同理Delete触发器也是一样,对于处理集合性的数据,sql往往是同时处理的,没有按照先后顺序,这样相应的触发器就不会一一触发,这时就需要用游标处理CURSOR。ALTER TRIGGER [dbo].[trg_AdminRole_insert_update] ON [dbo].[Admin_rol

u012280876的博客 270

触发器、游标(八)

触发器 触发器是一种特殊的存储过程﹐它不能被显式地调用﹐而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活。所以触发器可以用来实现对表实施复杂的完整性约束。 SQL Server为每个触发器都创建了两个专用表﹕Inserted表和Deleted表。这两个表由系统来维护﹐它们存在于内存中而不是在数据库中。这两个表的结构总是与被该触发器作用的表的结构相同。触发器执...

haomehaode的博客 241

sql server触发器的简单使用

sql server触发器用到的两个逻辑表:deleted和inserted分别代表操作所变更的旧记录集和操作所产生的新记录集。其中:执行INSERT操作后deleted逻辑表为空,inserted逻辑表有数据;执行DELETE操作后inserted逻辑表为空,deleted逻辑表有数据;执行UPDATE操作后两个逻辑表都有数据,deleted为旧记录集,inserted为新记录集。以上操作变更几

flynetcn的专栏 2454
上一篇: SQL Server数据类型简介
下一篇: SQL Server 2005语法增强之OBJECT_ID
Hello_World_wusu
博客等级 码龄18年 30粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值