欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 » Sql随手笔记 » 正文

热门阅读

ddl触发器

创建时间:2011年06月11日 12:49  阅读次数:(5549)
分享到:
DDL 触发器像标准触发器一样,在响应事件时执行存储过程。但与标准触发器不同的是,它们并不在响应对表或视图的 UPDATE、INSERT 或 DELETE 语句时执行存储过程。它们主要在响应数据定义语言 (DDL) 语句执行存储过程。这些语句包括 CREATE、ALTER、DROP、GRANT、DENY、REVOKE 和 UPDATE STATISTICS 等语句。

若要获取数据库中的DDL触发器示例,请打开SQL Server Management Studio对象资源管理器中的“数据库触发器”文件夹(位于数据库的“可编程性”文件夹中)。右键单击 触发器 并选择“编写数据库触发器脚本为”。默认情况下禁用 DDL 触发器 触发器脚本。
数据库->可编程性->数据库触发器

应用1:以下示例说明了如何使用DDL触发器来防止数据库中的任一表、存储过程被创建、修改或删除
create trigger safety
on database
for create_table,drop_table,
alter_table,create_procedure,
alter_procedure,drop_procedure
as
print 'you must disable trigger "safety" to drop or alter tables!'
rollback
go

--测试(建表)
create table test(a int)

--消息 
you must disable trigger "safety" to drop or alter tables!
消息 3609,级别 16,状态 2,第 1 行 
事务在触发器中结束。批处理已中止。


--启用触发器:
Enable trigger safety on database;
--禁用触发器:
Disable trigger safety on database;

应用2:这个示例是将用户对数据库结构改变记录起来,以便查询。
create trigger audit on database for ddl_database_level_events
as
declare @data xml
declare @cmd nvarchar(1000)
declare @posttime nvarchar(24)
declare @spid nvarchar(6)
declare @loginname nvarchar(100)
declare @hostname nvarchar(100)
set @data=eventdata()
set @cmd=@data.value('(/event_instance/tsqlcommand/commandtext)[1]','nvarchar(1000)')
set @cmd=ltrim(rtrim(replace(@cmd,'','')))
set @posttime=@data.value('(/event_instance/posttime)[1]','nvarchar(24)')
set @spid=@data.value('(/event_instance/spid)[1]','nvarchar(6)')
set @loginname=@data.value('(/event_instance/loginname)[1]','nvarchar(100)')
set @hostname=host_name()
insert into dbo.auditlog(command,posttime,hostname,loginname) values (@cmd,@posttime,@hostname,@loginname)
go
词视糜诓煌攴莸某绦虼搿?/p>

在 interval 为“年”(“yyyy”)时,比较 12 月 31 日和来年的 1 月 1 日,虽然实际上只相差一天,DateDiff 返回 1 表示相差一个年份?

来源:
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论0条
  • 暂无任何评论,请留下您对本文章的看法,共同参入讨论!
发表评论:
留言人:
内  容:
请输入问题 56+61=? 的结果(结果是:117)
结  果: