小孩» 讲解SQL Server 2005中DDL触发器的实现

 SQL SERVER 2005中,新增加了许多新的特性,其中的DDL触发器是个不错的选择,根据资料初步学习如下,现整理之。

  SQL SERVER 2005中,新增加了许多新的特性,其中的DDL触发器是个不错的选择,根据资料初步学习如下,现整理之。

  在sql server 2000中,只能为针对表发出的 DML 语句(INSERT、UPDATE 和 DELETE)定义 AFTER 触发器。SQL Server 2005 可以就整个服务器或数据库的某个范围为 DDL 事件定义触发器。

  可以为单个 DDL 语句(例如,CREATE_TABLE)或者为一组语句(例如,DDL_DATABASE_LEVEL_EVENTS)定义 DDL 触发器。在该触发器内部,您可以通过访问 eventdata() 函数获得与激发该触发器的事件有关的数据。该函数返回有关事件的 XML 数据。每个事件的架构都继承了 Server Events 基础架构。

  比如,在SQL SERVER 2005中,建立一个叫DDLTrTest 的数据库,并且建立一个叫mytable的表和Usp_Querymytable 的存储过程,如下所示。

  DROP?DATABASE?[DDLTRTEST]
  GO
  CREATE?DATABASE?DDLTRTEST
  GO
  USE?[DDLTRTEST]
  GO
  IF?EXISTS?(SELECT?*?FROM?SYS.OBJECTS
  WHERE?OBJECT_ID?=?OBJECT_ID(N’[DBO].[MYTABLE]‘)
  AND?TYPE?IN?(N’U'))
  DROP?TABLE?[DBO].[MYTABLE]
  GO
  CREATE?TABLE?MYTABLE(ID?INT,?NAME?VARCHAR(100))
  GO
  INSERT?INTO?MYTABLE?SELECT?1,’A’
  INSERT?INTO?MYTABLE?SELECT?2,’B’
  INSERT?INTO?MYTABLE?SELECT?3,’C’
  INSERT?INTO?MYTABLE?SELECT?4,’D’
  INSERT?INTO?MYTABLE?SELECT?5,’E’
  INSERT?INTO?MYTABLE?SELECT?6,’F’
  GO
  USE?[DDLTrTest]
  GO
  IF?EXISTS?(SELECT?*?FROM?sys.objects?WHERE?object_id?=
  OBJECT_ID(N’[dbo].[usp_querymytable]‘)
  AND?type?in?(N’P',?N’PC’))
  DROP?PROCEDURE?[dbo].[usp_querymytable]
  GO
  CREATE?PROC?USP_QUERYMYTABLE
  AS
  SELECT?*?FROM?MYTABLE
  GO

接下来定义一个DDL触发器如下

  CREATE?TRIGGER?STOP_DDL_on_Table_and_PROC
  ON?DATABASE
  FOR?CREATE_TABLE,DROP_TABLE,
  ALTER_TABLE,CREATE_PROCEDURE,
  ALTER_PROCEDURE,DROP_PROCEDURE
  AS
  SELECT?EVENTDATA().value
  (’(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]‘,
  ’nvarchar(max)’)
  PRINT?’You?are?not?allowed?to?CREATE,ALTER?and?DROP
  any?Tables?and?Procedures’
  ROLLBACK;

评论审阅已启用。您的评论可能需要一段时间才会出现。

郑重声明:资讯 【小孩» 讲解SQL Server 2005中DDL触发器的实现】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——