版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SQLSERVER
应用与开发
计算机工程技术学院(软件学院)
任淑美二00七年十一月(十)本课主要内容触发器概述创建触发器查看、修改和删除触发器本课核心知识点触发器的用途调用触发器时所发生的操作本课重点难点使用INSERTED和DELETED表使用INSTEADOF触发器本课教学目的了解触发器的概念和优点器理解触发器的工作原理掌握如何创建INSERT触发器、UPDATE触发器、DELETE触发器掌握如何使用inserted表和deleted表说明INSTEADOF触发器第10章触发器的创建和使用
触发器与存储过程是SQLServer数据库中的两类数据库对象,触发器是一种特殊类型的存储过程。
10.1概述触发器与存储过程都是由T-SQL语句编写而成,但是两者有不同之处:★存储过程是由用户根据需要调用执行,而触发器则是由某个数据修改动作(如INSERT,UPDATE,DELETE)触发而自动执行的。★存储过程不依赖于某个表而单独存在,而触发器则必须依赖于一个表或视图。10.1.1
理解触发器的概念
思考:为什么需要触发器呢?典型的应用就是BBS的发帖操作。BBS的数据库设计需要两个表:版块表(Section)存放BBS的版块信息,帖子表(Topic)存放每张帖子的信息,在版块表中包含每个版块的帖子总数(STopicCount)。当某用户发表话题,新增一张帖子时,可以使用如下的INSERT语句插入数据:USEbbsdbINSERTINTOTOPIC(TSID,Ttopic,Tcontents,Ttime,TUID)VALUES(2,’3月10日周六凤凰山行走探路’,‘【计划路线】山场---大镜山水库左侧--凤凰山’,getdate(),3)GO我们发现,当新发一张帖子时,虽然帖子表(Topic)中插入了一行数据记录新帖信息,但版块表(Section)的帖子总数(STopicCount)仍然没变,并没有自动跟随变化。显然,我们应在发帖时,根据新帖的版块信息,自动增加相应版块的帖子总数。【问题10-1】当某用户发表话题,新增一张帖子时,如何自动增加版块表中的帖子总数呢?较优的解决方案就是采用触发器。它不由用户直接调用,而是通过事件进行触发而自动被执行的。当对帖子表(Topic)中的数据进行插入(Insert)时,SqlServer会自动执行触发器所定义的SQL语句(比如更新帖子总数)。触发器基于一个表创建,但可以针对多个表进行数据操作,因此,对于数据库应用系统来说,触发器是很有力的工具,其应用非常广泛。10.1.2理解触发器的优点
触发器在商业上的用途很广,对于企业来说,触发器能够使商业运营过程自动化。例如在库存系统中,更新触发器能够探测到存货水平在何时达到一个特定的标准并在达到标准后自动发送一条采购信息给供应商。触发器还能够扩展SQLSERVER约束的逻辑完整性、默认值和规则。触发器的功能及优点:1.相关表进行级联更改触发器能够探测到数据库内的数据变更并自动级联影响相关表的数据,我们对某一个表的数据更新,引起该表的触发器执行,更新第2张的数据,从而引起第2个表上的触发器执行,影响第3个表的数据,实现级联更新。2.强化约束触发器可以强制限制,这些限制比用CHECK约束所定义的更复杂。与CHECK约束不同的是,触发器可以引用其它表中的列。3.跟踪变化对敏感数据的更改,可使用触发器实现详细、细致的日志记录。10.1.3理解触发器的类型
对应数据操作的三种基本类型:INSERT、DELETE和UPDATE,分别有三种不同类型的触发器,在执行相应的操作时触发。一个表可以同时有多个触发器,这些触发器可以是不同类型,也可以是同一类型的。例如用户可以为一个表的多个列指定多个UPDATE触发器,分别用于对应列的更新。从执行时间方面来看,SQLSERVER有两类触发器:AFTER:触发器在触发它们的语句完成后执行。同一张数据表中可以为每个触发操作(INSERT、DELETE和UPDATE)创建多个AFTER触发器。INSTEADOF:该触发器代替触发操作执行。可在表或视图上定义INSTEADOF触发器,只能为每个触发操作(INSERT、DELETE和UPDATE)定义一个INSTEADOF触发器。INSTEADOF触发器可用于对UPDATE和INSERT语句提供的数据执行增强的完整性检查,INSTEADOF触发器还允许指定某些操作,使一般不支持更新的视图可以被更新。10.2创建触发器创建触发器之前需要注意:触发器为数据库对象,其命名规则应与标识符命名规则一致。CREATETRIGGER必须是批处理中的第一条语句。只能在当前的数据库中创建,不能在临时表或系统表上创建触发器。TRUNCATETABLE虽然在功能上与DELETE都可以删除数据,但因为它是无日志记录的,因此不会触发DELETE触发器的执行。WRITETEXT命令不会触发INSERT或UPDATE触发器的执行。在触发器内部SQL语句与导致该触发器执行的SQL语句属于同一事务,因此,如触发器执行不成功,则整个(INSERT,UPDATE,DELETE)SQL将回滚。在同一条CREATETRIGGER语句中,可以为多种用户操作(如INSERT和UPDATE)定义相同的触发器操作。如果一个表的外键在DELETE/UPDATE操作上定义了级联,则不能在该表上定义INSTEADOFDELETE/UPDATE触发器。在创建触发器的语句中,禁止使用下列T-SQL语句:
ALTERDATABASE,CREATEDATABASE,DROPDATABASE LOADDATABASE,RESTOREDATABASE DISKINIT,DISKRESIZE,LOADLOG RECONFIGURE,RESTORELOG。可使用企业管理器或者CREATETRIGGER语句创建触发器。10.2.1
使用企业管理器创建触发器
可使用企业管理器创建触发器。(1)启动SQLSERVER企业管理器,依次单击控制台树上的【服务器组】→【服务器】→【数据库】→【开要创建触发器的表所在的数据库】→【表】,在要创建触发器的表上单击右键,并在弹出的快捷菜单中依次单击【所有任务】→【管理触发器】,如图所示。(2)弹出“触发器属性”对话框,如图所示。(3)在“名称”下拉框中选择“新建”选项,并在“文本”框中输入触发器的语句内容。(4)单击【检查语法】按钮,检查所输入的SQL语句语法的是否正确。(5)单击【应用】按钮,或者【确定】按钮将此触发器添加到表中。10.2.2
使用Transact-SQL语言创建触发器用CREATETRIGGER语句创建触发器。语法格式:CREATETRIGGER
trigger_name
ON{表|视图}[WITHENCRYPTION]{FOR|AFTER|INSTEADOF}{[DELETE][,][INSERT][,][UPDATE]}AS{IFUPDATE(列名)[{AND|OR}UPDATE(列名)][...n]}
sql_语句[...n]参数说明:trigger_name:是触发器的名称。{表|视图}:是在其上执行触发器的表或视图。WITHENCRYPTION:加密syscomments
表中包含CREATETRIGGER语句文本的条目。AFTER:指定触发器只有在触发SQL语句中指定的所有操作都已成功执行后才激发。所有的引用级联操作和约束检查也必须成功完成后,才能执行此触发器。INSTEADOF:指定执行触发器而不是执行触发SQL语句,从而替代触发语句的操作。在表或视图上,每个INSERT、UPDATE或DELETE语句最多可以定义一个INSTEADOF触发器。{[DELETE][,][INSERT][,][UPDATE]}:是指定在表或视图上执行哪些数据修改语句将激活触发器的关键字。sql_statement:是触发器的条件和操作。触发器条件指定其它准则,以确定DELETE、INSERT或UPDATE语句是否导致执行触发器操作。IFUPDATE(列名):测试在指定的列上进行的INSERT或UPDATE操作,不能用于DELETE操作,可以指定多列。1.deleted表和inserted表触发器是在数据表上创建的,我们将触发器所依附的表称为触发器表。在触发器体内,我们可以使用两个特殊的临时表:deleted表和inserted表。SQLSERVER为每个触发器都创建了这两个表。deleted表和inserted表是逻辑临时表,存放于内存中,不存放在数据库中,由系统维护,不允许用户直接对这两个表进行修改。这两个表在结构上类似于触发器表,它们用于保存用户操作可能更改的行的旧值或新值。(1)inserted表:临时保存被INSERT和UPDATE语句影响的新的数据行。即在执行INSERT或UPDATE语句时,新的数据行被添加到数据表中,同时这些新的数据行也被复制到inserted临时表中,如图所示。(2)deleted表:临时保存了被DELETE和UPDATE语句影响旧的数据行。即在执行DELETE或UPDATE语句时,从数据表中删除旧的数据行,然后将这些旧的数据行存入deleted表中,如图所示。UPDATE操作相当于首先执行DELETE操作,然后执行INSERT操作,因此要用到deleted表和inserted表两个表。例如,若需要获取新插入的数据,可使用:SELECT*FROMinserted这三个操作对inserted表、deleted表的影响如表10-2所示。2.INSERT触发器INSERT触发器是在对表进行数据插入时被触发的触发器。定义INSERT触发器时,要在使用CREATETRIGGER创建触发器时,在FOR后使用INSERT参数。【例10-1】当某用户发表话题,新增一张帖子时,并自动增加版块表中的帖子总数。【分析】:(1)在帖子表TOPIC上创建INSERT触发器(2)inserted临时表中获取新插入的帖子的版块编号(3)据新添帖子的版块编号,更新相应版块的帖子数,使帖子数+1。代码如下:USEbbsdbGOCREATETRIGGERtr_topic_insert1
ONtopicFORINSERT
ASUPDATESECTIONSETSTopicCount=StopicCount+1FROMSECTIONINNERJOININSERTEDONSECTION.Sid=INSERTED.TSIDGO本例创建了一个AFTER触发器(默认为AFTER型触发器)用于INSERT操作,当向数据表TOPIC插入数据时,引发触发器更新版块表SECTION中的帖子总数。验证此触发器,新发一张帖,并在发帖前后查询帖子总数。USEbbsdbGO--查询第2个版块的帖子总数SELECTstopicCountfromsectionwheresid=2--在第2个版块新发一张总数INSERTINTOTOPIC(TSID,Ttopic,Tcontents,Ttime,TUID)VALUES(2,'3月10日周六凤凰山行走探路','【计划路线】山场---大镜山水库左侧--凤凰山',getdate(),3)--重新查询第2个版块的帖子总数SELECTstopicCountfromsectionwheresid=2上述SQL的运行结果如图10-5所示,表明发帖前后时,版块表SECTION中帖子总数由3变为4,帖子总数已自动加1,达到了目的。注意:不需要在触发器中创建一个Inserted表。Sqlserver自动管理这些由触发器使用的驻留内存表。Sqlserver对Inserted关键字是大小写不敏感的。【例10-2】当发帖时,假设我们有这样的业务规则:如果用户未录入帖子标题,则该帖不能发表。【分析】:(1)在帖子表TOPIC上创建INSERT触发器(2)从inserted临时表中获取新帖的标题和内容(3)判断新帖的标题是否为空,如为空,则回滚事务。代码如下:USEbbsdbGOCREATETRIGGERtr_topic_insert2ONtopicFORINSERTAS Declare@topicvarchar(255)SELECT@topic=TTOPICFROMINSERTEDIF@topic=''BEGIN RAISERROR('请录入帖子标题',16,1) ROLLBACKTRANSACTIONENDGO当向数据表TOPIC插入数据时,引发触发器,即上述语句首先检查新帖标题是否为空,如为空,则打印“请录入帖子标题”信息并回滚事务,导致数据插入不成功;否则,数据被正常插入。验证此触发器,发一张没有标题的新帖:INSERTINTOTOPIC(TSID,Ttopic,Tcontents,Ttime,TUID)VALUES(2,'','【计划路线】山场---大镜山水库左侧--凤凰山',getdate(),3)系统显示“请录入帖子标题”,并回滚使插入无效。如录入新帖标题,则可以成功插入到帖子表TOPIC。提示:从事务的角度来说,触发器与触发它的数据增、删、改语句是作为同一个事务来处理,如果遇到ROLLBACK操作,系统将回滚所有的操作,包括数据表的增删改。因此,上例的INSERT如果违反业务规则,则数据不能插入。3.DELETE触发器DELETE触发器是在对表进行数据删除时被触发的触发器。定义DELETE触发器时,要在使用CREATETRIGGER创建触发器时,在FOR后使用DELETE参数。DELETE触发器的典型应用包括:级联删除和系统中的数据备份等。例如当数据表的记录过多时,为了不影响数据访问速度,需要定期删除部分数据,当删除数据时,需要自动转存到备份表,以方便对历史数据的查询。【例10-3】建立一个触发器,当用户删除某张帖子时,自动将版块表SECTION中相关版块的帖子总数减一。【分析】:(1)在帖子表(TOPIC)上创建DELETE触发器。(2)从deleted临时表中获取删除的版块编号。(3)修改帖子总数,使相应版块的帖子总数减一。代码如下:USEbbsdbGOCREATETRIGGERtr_topic_delete1ONtopicFORDELETEASUPDATESECTIONSETSTopicCount=StopicCount-1FROMSECTIONINNERJOINDELETEDONSECTION.Sid=DELETED.TSIDGO本例建立了一个AFTER触发器用于DELETE操作,当从帖子表TOPIC删除某张帖子时,从DELETED临时表中查询到删除的帖子所在版块号,然后使相应版块的帖子总数减一。验证此触发器,用户删除一张帖子(TID=3):DELETEFROMTOPICWHERETID=3我们发现,第3号帖子删除后,对应版块(第2版块)的帖子总数自动减一。思考:使用TRUNCATTETABLE可以清除表中所有数据,TRUNCATTETABLE操作可以触发DELETE触发器吗?【例10-4】建立一个触发器,防止用户删除帖子表TOPIC中的数据时,由于没有使用限制条件,如DELETEFROMTOPIC,而导致全部数据被删除的情况发生。【分析】:(1)在版块表SECTION上创建DELETE触发器。(2)从deleted临时表中获取删除的记录行数,SELECTCOUNT(*)FROMDELETED。(3)如删除记录行数>1,则打印提示信息,并回滚。代码如下:CREATETRIGGERtr_topic_delete2ONtopicFORDELETEASDeclare@Row_cnt
intSELECT@Row_cnt=count(*)FROMDELETEDIF@Row_cnt>1BEGINPRINT'注意:删除的数据行数>1,导致不能删除'ROLLBACKTRANSACTIONENDGO本例建立了一个AFTER触发器用于DELETE操作,首先申明一个局部变量用以存放DELETED表中数据行数。当从帖子表(TOPIC)删除数据时,如果删除行数>1,则认为操作有误,打印出错信息并回滚,使删除无效。但是如果使用TRUNCATETABLETOPIC删除表中所有数据,则触发器不会发生,可成功删除全部数据。验证此触发器:DELETEFROMTOPIC运行结果如图所示,将打印信息“注意:删除的数据行数>1导致不能删除”,并回滚事务,使删除无效。4.UPDATE触发器一个UPDATE操作相当于一个删除旧记录并插入新记录的组合操作,要用到INSERTED和DELETED两个表。UPDATE语句可看成两步操作:即捕获数据前像(beforeimage)的DELETE语句和捕获数据后像(afterimage)的INSERT语句。当在定义有UPDATE触发器的表上执行UPDATE语句时,原始行(前像)被移入到deleted表,更新行(后像)被移入到inserted表。触发器检查deleted表和inserted表以及被更新的表,来确定是否更新了多行以及如何执行触发器动作。可以使用IFUPDATE语句定义一个监视指定列的数据更新的触发器。这样,就可以让触发器容易的隔离出特定列的活动。当它检测到指定列已经更新时,触发器就会进一步执行适当的动作,如发出错误信息指出该列不能更新,或者根据更新的值执行一系列的动作语句。语法:IFUPDATE(<column_name>)BEGIN…END【例10-5】建立一个触发器,当版主修改某张帖子的所属版块时,自动更新新旧两个版块的帖子总数。【分析】:(1)在帖子表(TOPIC)上创建UPDATE触发器。(2)从deleted临时表中获取原版块编号,并使原版块的帖子总数-1。(3)从inserted临时表中获取新版块编号,并使新版块的帖子总数+1。代码如下:USEbbsdbGOCREATETRIGGERtr_topic_updateONtopicFORUPDATEASifupdate(TSID)BEGINUPDATESECTIONSETSTopicCount=StopicCount-1FROMSECTIONINNERJOINDELETEDONSECTION.Sid=DELETED.TSIDUPDATESECTIONSETSTopicCount=StopicCount+1FROMSECTIONINNERJOINinsertedONSECTION.Sid=INSERTED.TSIDENDGO本例建立了一个AFTER触发器用于UPDATE操作,首先判断是否修改帖子所属版块(TSID),如果是,则将帖子所在原版块的帖子总数-1,并将新版块的帖子总数+1。验证此触发器,当从帖子表(TOPIC)修改除某张帖子所属版块(从第2个版块移到第1个版块):USEbbsdbGO--查询第1、2个版块的版块编号、帖子总数SELECTsid,stopicCountfromsectionwheresid=2ORsid=1--将第3张帖从第2个版块移到第1个版块UPDATETOPICSETTSID=1WHERETID=3--重新查询第1、2个版块的版块编号、帖子总数SELECTsid,stopicCountfromsectionwheresid=2ORsid=1结果显示:帖子所在原版块(版块号为2)的帖子总数-1,设置的新版块(版块号为1)的帖子总数-1。思考:如果一次修改多行记录,如将第2个版块的所有帖子移到第1个版块:UPDATETOPICSETTSID=1WHERETSID=2;触发器会触发一次还是多次呢?5.INSTEADOF触发器INSTEADOF触发器指定执行触发器内部SQL而不是执行触发SQL(INSERT,DELETE,UPDATE)语句,从而替代原始的触发动作。INSTEADOF触发器扩展了视图更新的类型。对于每一种触发动作(INSERT、UPDATE或DELETE),每一个表或视图只能有一个INSTEADOF触发器。INSTEADOF触发器常常被用于更新那些没有办法通过正常方式更新的视图。例如,通常不能在一个基于多表连接的视图上进行DELETE操作。然而,可以编写一个INSTEADOFDELETE触发器来实现删除。值得注意的是,不能在带有WITHCHECKOPTION定义的视图中创建INSTEADOF触发器。【例10-6】假设创建了一个用于显示帖子信息的视图V_TOPIC,其中的发帖人用发帖人昵称显示。如果通过该视图删除帖子:DELETEFROMV_TOPICWHERETID=2,将产生如图10-7所示的错误信息。如果要顺利执行删除,应如何处理?【分析】:(1)在视图V_TOPIC上创建INSTEADOF触发器,不执行视图的删除。(2)在触发器内部,从基表TOPIC执行删除。创建视图V_TOPIC代码如下:CREATEVIEWV_TOPICASSELECTTID,TSID,Users.UName,TReplyCount,TEmotion,
TTopic,TContents,TTime,TClickCount,TFlag,TLastClickTFROMTopicINNERJOINUsersONTUID=Users.UIDGO下面通过视图V_TOPIC删除数据:DELETEFROMV_TOPICWHERETID=1该操作将产生下列错误信息:视图或函数‘V_TOPIC’不可更新,因为修改会影响多个基表。为了使删除操作顺利执行,可在视图V_TOPIC上创建INSTEADOF触发器,用于DELETE操作,用触发器语句来代替删除语句。CREATETRIGGERv_topic_deleteONV_TOPICINSTEADOFDELETEAS DELETEFROMTOPICWHERETIDIN(SELECTTIDFROMDELETED)GO验证此触发器:DELETEFROMV_TOPICWHERETID=1结果成功删除了帖子信息。10.3查看、修改和删除触发器
触发器建立后,可查看、修改和删除触发器的定义。10.3.1查看触发器
可以通过企业管理器查看触发器,也可通过系统存储过程查看触发器。有4个系统存储过程,可以显示有关触发器的信息:sp_help
trigger_name:显示触发器的所有者和创建时间sp_helptext
trigger_name:显示触发器的源代码sp_helptrigger
table_name:显示某个表定义的触发器清单sp_depends
trigger_name:显示该触发器引用的对象清单如果丢失了用来创建触发器的源代码,那么sp_helptext系统存储过程就非常有用了。10.3.2修改触发器
触发器建立后可对其进行修改,既可修改其名称,也可以修改其定义、有效性等。1.修改触发器名称语法格式:sp_rename
old_trigger_name,new_trigger_name参数说明:old_trigger_name,new_trigger_name分别表示触发器的旧名称与新名称。2.修改触发器内容(1)使用T-SQL修改触发器内容,语法格式如下:语法格式:ALTERTRIGGERtrigger_name
ON{表|视图}[WITHENCRYPTION]{FOR|AFTER|INSTEADOF}{[DELETE][,][INSERT][,][UPDATE]}AS{IFUPDATE(列名)[{AND|OR}UPDATE(列名)][...n]}
sql语句[...n](2)使用企业管理器修改触发器内容在“触发器属性”对话框的“名称”下拉菜单中选择要修改的触发器名称(默认是“<新建>触发器”),然后在该对话框的文本框中将显示触发器的T-SQL文本,将其修改成新业务要求即可,其他操作与创建触发器类似。3.修改触发器的有效性有时候需要暂时让触发器失效,例如:不进行增、删、改的检查,以使正常情况下会违反触发器条件的数据操作得以顺利执行。该项功能很实用,一旦需要恢复触发器的功能,不必重新创建、编写,只需要让触发器重新生效即可。(1)使触发器失效语法格式:Altertabletable_name
disabletriggertrigger_name参数说明:table_name
需要暂时失效的触发器名称所引用的表名。trigger_nam
需要暂时失效的触发器名称。(2)使失效的触发器重新生效语法格式:Altertabletable_name
enabletriggertrigger_name参数说明:table_name
需要暂时失效的触发器名称所引用的表名。trigger_nam
需要暂时失效的触发器名称。ENABLETRIGGER重新启用触发器。【例10-7】在【例10-3】中创建了“不允许删除多行帖子信息”的DELETE触发器tr_topic_delete2,但现在要做系统维护,需要删除所有言语不文明或违法的帖,可能一次删除多张帖子,应如何处理?【分析】:(1)可以先使tr_topic_delete2触发器失效。(2)执行删除操作。(3)最后使tr_topic_delete2触发器生效。代码如下:(1)先使tr_topic_delete2触发器失效。Altertabletopicdisabletriggertr_topic_delete2(2)执行删除操作。DeletefromtopicwhereTcontentslike'%支持法轮功%'(3)最后使tr_topic_delete2触发器生效。Altertabletopic
enabletriggertr_topic_delete24.使用触发器,指定顺序执行不仅可以为一个表创建多个触发器,还可以为一个表的同—个SQL语句(例如,UPDATE语句)创建多个触发器。那么,当执行数据修改UPDATE语句时,多个触发器的执行顺序是否可控制呢?我们可以使用sp_settriggerorder指定第一个或最后一个激发的、与表关联的AFTER触发器。在第一个和最后一个触发器之间激发的AFTER触发器将按未定义的顺序执行。语法格式:sp_settriggerorder
triggername,order,,statement_type
参数说明:
trigger_nam
需要设置执行顺序的触发器名称。
Order 新触发器顺序的设置,可以是下列值中的任何一个。First最先激发的触发器;Last最后激发的触发器;None以未定义的顺序激发的触发器。
statement_type
指定哪类触发器。可以是:INSERT、UPDATE或DELETE。【例10-8】在【例10-2】和【例10-3】中已经创建了两个DELETE触发器,在删除帖子信息时,需要首先检查是否有多行记录被删除,即首先执行tr_topic_delete2。代码如下:sp_settriggerorder'tr_topic_delete2','first','DELETE'10.3.3删除触发器
当不再需要某个触发器时,可将其删除。可以通过除去触发器或除去触发器表删除触发器。除去表时,也将除去所有与表关联的触发器。(1)使用T-SQL删除触发器,语法格式如下:语法格式:DROPTRIGGERtrigger_name[,...n](2)使用企业管理器删除触发器在图所示的“触发器属性”对话框的“名称”下拉菜单中选择要删除的触发器名称(默认是“<新建>触发器”),然后单击【删除】按钮并确认。10.4综合实例数据库管理信息系统中,常常需要监控敏感数据的更改(如用户的计费信息、员工的工资信息等),可使用触发器实现详细、细致的日志记录。【例10-9】用户信息表Users中包含敏感的用户积分和用户等级信息,现在需要对其进行监控,如果更改了用户积分和用户等级,则需要生成审计记录并插入到审核表,记录更新前后的数据,并记录修改者的登录名和客户机名,以及修改时间。【分析】:(1)产生跟踪敏感信息的审核表(2)用户信息表Users上创建UPDATE触发器(3)判断是否修改用户积分和用户等级,是则执行触发器内容;否则不做任何处理。(4)从deleted临时表中获取修改前的数据,插入审核表。(5)从inserted临时表中获取修改后的数据,插入审核表。(6)使用SUSER_SNAME()返回登录名。(7)使用HOST_NAME()返回工作站名称。(8)使用GETDATE()返回修改时间。代码如下:(1)产生跟踪敏感信息的审核表CREATETABLEauditUsers(audit_Id
intidentity(1,1)primarykey,--审计编号,标识列
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 上海嘉定区离婚财产分配协议2024年2篇
- 2024年公众文化推广协议3篇
- 2024年专业居间贷款服务协议3篇
- 北师大版二年级数学上册第七单元《分一分与除法》(大单元教学设计)
- 二零二四年度校园奶茶店特许经营合同2篇
- 2024年期货资金借款协议
- 2024年智能硬件产品代运营2篇
- 二零二四年度供应链管理对赌协议书3篇
- 2024年度城市供水供电合作协议4篇
- 退房合同范本(2篇)
- SMM英国建筑工程标准计量规则中文 全套
- ICU脓毒血症护理查房
- 2023-2024学年安徽省天长市小学数学五年级下册期末自测考试题
- GB/T 28222-2011服务标准编写通则
- 第九课 四川料理は辛いです 课件 【备课精讲精研】 新标准日本语初级上册
- 全国小学数学优质课一等奖《9加几》精品课件
- 备战2022届高考英语 应用文发言稿写作指导 课件(13张PPT)
- 共价键(教学讲解课件)
- 完整版阳极氧化工艺操作规程
- 水产品的质量与安全课件
- 南京市芳草园小学苏教版五年级数学上册《列举法解决问题的策略》活动单(区级公开课定稿)
评论
0/150
提交评论