活动介绍

SQLServer触发器:AFTER、INSTEADOF及审计应用详解

立即解锁
发布时间: 2025-08-24 00:05:56 阅读量: 1 订阅数: 5
PDF

SQL Server 2000高级编程指南

# SQL Server触发器:AFTER、INSTEAD OF及审计应用详解 ## 1. SQL查询与触发器基础 ### 1.1 初始查询示例 首先来看一些基础的SQL查询语句: ```sql SELECT 'Second' FROM sysobjects WHERE type = 'S' SELECT @@IDENTITY AS 'IDENTITY', SCOPE_IDENTITY () AS 'SCOPE IDENTITY', IDENT_CURRENT ('Summary') AS 'Summary', IDENT_CURRENT ('Raw') AS 'Raw' ``` 第一个`INSERT`语句会向`Raw`表插入若干行,每行对应`sysobjects`中的一个用户表,`RawData`列会被填充为常量`'First'`。这会触发`tri_Raw`触发器,向`Summary`表插入一行数据,此时`@@IDENTITY`的值为1。而`SCOPE_IDENTITY()`返回的值为15,这是因为在Northwind数据库中有15个用户表。两个`IDENT_CURRENT()`调用返回的值分别对应`@@IDENTITY`和`SCOPE_IDENTITY()`。 第二个`INSERT`语句与第一个类似,不过这次是为数据库中的每个系统表插入一行,`RawData`列填充为常量`'Second'`。由于最后填充的表是`Summary`,且该表现在只有两行,所以`@@IDENTITY`的值为2,`SCOPE_IDENTITY()`的值增加了约19(在Northwind数据库中)。 ### 1.2 sysobjects表说明 `sysobjects`是每个数据库中都存在的系统表,它列出了数据库中每个对象的元数据信息,如名称、类型等。其中,类型`U`表示用户表,类型`S`表示系统表。 ## 2. AFTER触发器理解 ### 2.1 AFTER触发器概述 在SQL Server 2000版本发布之前,唯一的触发器类型是`FOR`触发器。这种触发器会在所有约束(如果有的话)检查之后触发。如果存在约束违规,约束会阻止触发器触发,从而防止级联删除。在SQL Server 2000中,使用`AFTER`触发器,指定`AFTER`与早期版本指定`FOR`的效果相同,名称的改变更直观,反映了触发器在表的数据修改操作之后触发。 与`INSTEAD OF`触发器不同,不允许在视图上创建`AFTER`触发器。SQL Server 7.0和2000版本的一个重要区别是,2000版本通过DRI支持级联删除,级联删除可以发生,并且允许`DELETE`触发器触发。需要记住的基本规则是,级联中的所有约束必须成功,触发器才能触发。 ### 2.2 AFTER触发器应用示例 #### 2.2.1 处理datetime列 以下是一个使用`AFTER`触发器从`datetime`列中移除时间部分的示例: ```sql CREATE TABLE DateTable ( ID int NOT NULL IDENTITY (1, 1) PRIMARY KEY, Txt char (10) NOT NULL, EntryDate datetime NOT NULL ) GO CREATE TRIGGER triu_DateTable ON DateTable AFTER INSERT, UPDATE AS IF @@ROWCOUNT = 0 RETURN IF UPDATE (EntryDate) UPDATE D SET EntryDate = CONVERT (char (10), I.EntryDate, 112) FROM inserted I JOIN DateTable D ON D.ID = I.ID GO ``` 对于`DateTable`表的每次`INSERT`或`UPDATE`操作,`triu_DateTable`触发器都会触发。如果没有行被修改,触发器会立即返回。然后,它会判断`EntryDate`列是否被更新,如果是更新操作或者触发触发器的操作是`INSERT`,则触发器会将`EntryDate`重置,去除时间部分,将时间设置为午夜。 也可以在`DateTable`表的`EntryDate`列上应用`CHECK`约束,防止`EntryDate`列包含除午夜之外的时间,这样就不需要触发器了。可以将约束看作是主动的,而触发器是被动的。约束的问题在于,所有客户端代码都必须进行清理,以确保没有带时间组件的日期传递到SQL Server。而使用触发器,客户端代码则无关紧要,因为数据在插入数据库之前会被清理。 #### 2.2.2 级联删除示例 考虑以下创建`Parent`、`Child`和`Grandchild`表的脚本: ```sql CREATE TABLE Parent ( ID int NOT NULL PRIMARY KEY ) GO CREATE TABLE Child ( ID int NOT NULL PRIMARY KEY REFERENCES Parent (ID) ON DELETE CASCADE ) GO CREATE TABLE GrandChild ( ID int NOT NULL PRIMARY KEY REFERENCES Child (ID) ON DELETE CASCADE ) GO INSERT Parent VALUES (1) INSERT Parent VALUES (2) INSERT Parent VALUES (3) INSERT Parent VALUES (4) GO INSERT Child VALUES (1) INSERT Child VALUES (2) INSERT Child VALUES (3) INSERT Child VALUES (4) GO INSERT GrandChild VALUES (1) INSERT GrandChild VALUES (2) INSERT GrandChild VALUES (3) INSERT GrandChild VALUES (4) GO ``` 每个表都使用了`ON DELETE CASCADE`选项。接下来,为每个表创建`DELETE`触发器: ```sql CREATE TRIGGER trd_Parent ON Parent AFTER DELETE AS IF @@ROWCOUNT = 0 RETURN PRINT 'Inside Parent trigger.' GO CREATE TRIGGER trd_Child ON Child AFTER DELETE AS IF @@ROWCOUNT = 0 RETURN PRINT 'Inside Child trigger.' GO CREATE TRIGGER trd_GrandChild ON GrandChild AFTER DELETE AS IF @@ROWCOUNT = 0 RETURN PRINT 'Inside GrandChild trigger.' GO ``` 执行以下删除语句: ```sql DELETE Parent WHERE ID BETWEEN 2 AND 3 ``` 会得到按相反顺序的`PRINT`消息,即先从`tri_GrandChild`,然后是`tri_Child`,最后是`tri_Parent`。在编写级联情况下的触发器时,需要牢记这一点。 ## 3. INSTEAD OF触发器理解 ### 3.1 INSTEAD OF触发器概述 `INSTEAD OF`触发器是SQL Server 2000新增的功能,它允许用自己的功能替换标准的`INSERT`、`UPDATE`或`DE
corwn 最低0.47元/天 解锁专栏
赠100次下载
继续阅读 点击查看下一篇
profit 400次 会员资源下载次数
profit 300万+ 优质博客文章
profit 1000万+ 优质下载资源
profit 1000万+ 优质文库回答
复制全文

相关推荐

LI_李波

资深数据库专家
北理工计算机硕士,曾在一家全球领先的互联网巨头公司担任数据库工程师,负责设计、优化和维护公司核心数据库系统,在大规模数据处理和数据库系统架构设计方面颇有造诣。
最低0.47元/天 解锁专栏
赠100次下载
百万级 高质量VIP文章无限畅学
千万级 优质资源任意下载
千万级 优质文库回答免费看
立即解锁

专栏目录

最新推荐

【STM32CubeIDE代码补全完全教程】:成为STM32开发专家的终极学习路径

![【STM32CubeIDE代码补全完全教程】:成为STM32开发专家的终极学习路径](https://reversepcb.com/wp-content/uploads/2023/05/STM32CubeMX-Configuration-Perspective.png.webp) # 摘要 随着嵌入式系统开发的普及,STM32CubeIDE作为一种集成开发环境,其代码补全功能在提升开发效率和代码质量方面扮演着重要角色。本文首先介绍了STM32CubeIDE的基本概念及安装流程,随后深入探讨了代码补全的理论基础、实践应用和性能优化。特别地,本文分析了代码补全如何与STM32开发实践相结合,

固件更新风险评估与减轻策略:系统停机的最小化

![固件更新风险评估与减轻策略:系统停机的最小化](https://montemagno.com/content/images/2021/09/Screen-Shot-2021-09-06-at-7.59.46-AM.png) # 摘要 固件更新作为维护设备安全性与性能的重要手段,在技术快速发展的今天显得尤为重要,但同时伴随着风险和挑战。本文深入探讨了固件更新过程中的风险评估、控制点识别、系统停机成本及影响,并通过实践案例分析了成功与失败的固件更新经验。针对固件更新风险,文章提出了一系列减轻策略,包括风险预防措施、自动化更新流程、持续集成策略以及用户教育和技术支持的重要性。最后,本文展望了固

持续集成与部署(CI_CD)实施:S12(X)项目管理秘诀

![持续集成与部署(CI_CD)实施:S12(X)项目管理秘诀](https://www.edureka.co/blog/content/ver.1531719070/uploads/2018/07/CI-CD-Pipeline-Hands-on-CI-CD-Pipeline-edureka-5.png) # 摘要 随着软件开发速度的加快,持续集成与持续部署(CI/CD)已成为企业确保快速交付高质量软件的关键实践。本文深入探讨了CI/CD的核心概念、工具选择与技术实践,并结合S12(X)项目的案例分析了CI/CD的实施细节。文中详细阐述了CI/CD工具的分类与特点,流水线设计原则以及环境配置

【飞行模拟器的自动化测试】:实现F-16模拟配平的自动化校准,效率倍增!

![【飞行模拟器的自动化测试】:实现F-16模拟配平的自动化校准,效率倍增!](https://d3i71xaburhd42.cloudfront.net/d30c440a618b1e4e9e24152ae112553108a7a48d/24-Figure4.1-1.png) # 摘要 本文对飞行模拟器自动化测试进行了全面概述,探讨了自动化测试的理论基础、F-16模拟配平自动化校准的实现、自动化校准测试的深度应用与优化,以及未来展望。自动化测试不仅提高了测试效率和准确性,还降低了人力成本。针对F-16模拟配平,文章详细介绍了自动化校准脚本的设计、开发、测试与部署,并分析了校准测试数据,提出了

老冀文章编辑工具v1.8辅助写作功能评测:AI内容创作的未来趋势

![老冀文章编辑工具v1.8辅助写作功能评测:AI内容创作的未来趋势](https://manualdojornalistadigital.com.br/wp-content/uploads/2024/04/como-ferramentas-de-ia-ajudam-a-escrever-textos-blog-Manual-do-Jornalista-Digital-1024x576.jpg) # 摘要 随着人工智能技术的飞速发展,AI在内容创作领域的应用逐渐成为热点,老冀文章编辑工具v1.8作为代表之一,集成了先进的AI算法,旨在为内容创作提供辅助和优化。本文详细探讨了老冀文章编辑工具的

【DB文件查看器故障排除】:快速定位与解决问题的方法

![DB文件怎么打开—DB文件查看器](https://365datascience.com/resources/blog/2018-08-image2-min-1024x468.png) # 摘要 本文旨在通过详细分析DB文件查看器的工作原理、常见故障模式、诊断排查技巧和预防性维护措施,为用户提供一套全面的故障排除解决方案。文章首先概述了DB文件查看器的结构、类型、界面和功能,随后深入探讨了导致故障的各种原因。在故障诊断与排查技巧章节,文中强调了日志文件分析的重要性,并介绍了资源监控与性能调优的方法,包括使用调试工具和命令的技巧。实践案例章节通过案例分析,向读者展示了故障排除的实际步骤。最

【GIS地图制图精要】:打造专业级别的内蒙古水系分布图

![【GIS地图制图精要】:打造专业级别的内蒙古水系分布图](https://www.nicoladeinnocentis.it/sito/wp-content/uploads/2017/10/georeference.png) # 摘要 本文全面探讨了地理信息系统(GIS)在地图制图中的应用,涵盖了从数据获取到制图实践操作的整个流程。文章首先介绍了GIS的基础知识以及地图制图的基本概念。随后,针对内蒙古水系数据的获取、预处理、清洗和质量控制进行了详细讨论,并比较了当前流行的GIS软件及其制图功能。在分析和制图方面,文章深入探讨了水文地理学的应用、专题制图技术和动态变化分析方法。实践操作章节

Brocade MIBs网络带宽管理:基于MIBs的监控与控制策略详解

![Brocade MIBs网络带宽管理:基于MIBs的监控与控制策略详解](https://substackcdn.com/image/fetch/w_1200,h_600,c_fill,f_jpg,q_auto:good,fl_progressive:steep,g_auto/https%3A%2F%2Fsiteproxy.ruqli.workers.dev%3A443%2Fhttps%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F400e92f8-7e84-4ba6-9443-74368c1eaeb6_3735x3573.jpeg) # 摘要 本文综述了Brocade MIBs在网络带宽管理中的应用,

【STID135开发板通信大揭秘】:蓝牙与Wi-Fi的有效使用策略

![【STID135开发板通信大揭秘】:蓝牙与Wi-Fi的有效使用策略](https://static.mianbaoban-assets.eet-china.com/xinyu-images/MBXY-CR-9c67a73116ebeb576fc4d4d298f5f805.png) # 摘要 本论文深入探讨了STID135开发板在多种通信技术中的应用,包括蓝牙和Wi-Fi技术的理论基础、实践应用、性能优化与安全策略。通过对蓝牙和Wi-Fi技术原理及其在STID135开发板上的配置和应用进行详细分析,揭示了这两种通信技术如何在实际项目中协同工作,以及它们在智能家居和工业物联网领域中的应用案例

BCM5396日志分析与故障诊断:掌握日志管理,快速定位问题

# 摘要 本文围绕BCM5396日志分析与故障诊断的核心议题展开,首先概述了日志分析与故障诊断的基本概念,随后深入探讨了日志数据的类型、结构、收集、存储、安全性和合规性管理。紧接着,文中介绍了多种日志分析工具及其实践应用,包括模式匹配、日志聚合、排序和可视化技术,并通过实际案例分析展示了日志分析在故障诊断和性能优化中的重要性。文章进一步详细阐述了故障诊断的流程、工具和策略,并对故障案例进行了深入分析,提出了解决方案及预防措施。最后,本文探讨了日志管理的最佳实践以及故障预防和持续改进方法,旨在为网络管理和故障排除提供指导和参考。 # 关键字 BCM5396;日志分析;故障诊断;数据管理;安全合