SQL Server 存储过程版本控制-DDL触发器

存储过程版本控制-DDL触发器

–参考:存储过程版本控制

http://enjoyasp.net/?p=2431

CREATE TABLE [dbo].[ChangeLog](

[LogId] [int] IDENTITY(1,1) NOT NULL,

[DatabaseName] [varchar] (256) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,

[EventType] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,

[ObjectName] [varchar](256) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,

[ObjectType] [varchar](25) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,

[SqlCommand] [nvarchar](max) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,

[EventDate] [datetime] NOT NULL CONSTRAINT [DF_EventsLog_EventDate]  DEFAULT (getdate()),

[LoginName] [varchar](256) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,

[IP] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL

) ON [PRIMARY]

ALTER trigger backup_objects

on ALL SERVER –all server 所有数据库上的操作。database:当前数据库的操作。On用来指定作用域

for create_procedure, alter_procedure, drop_procedure,

create_table, alter_table, drop_table,create_view, alter_view, drop_view,

create_function, alter_function, drop_function

as

set nocount on

declare @data xml set @data = EVENTDATA()

insert into BRM_TEST.dbo.changelog(databasename, eventtype, objectname, objecttype, sqlcommand, loginname,IP)

values( @data.value(‘(/EVENT_INSTANCE/DatabaseName)[1]‘, ‘varchar(256)‘),

@data.value(‘(/EVENT_INSTANCE/EventType)[1]‘, ‘varchar(50)‘),

@data.value(‘(/EVENT_INSTANCE/ObjectName)[1]‘, ‘varchar(256)‘),

@data.value(‘(/EVENT_INSTANCE/ObjectType)[1]‘, ‘varchar(25)‘),

@data.value(‘(/EVENT_INSTANCE/TSQLCommand)[1]‘, ‘varchar(max)‘),

@data.value(‘(/EVENT_INSTANCE/LoginName)[1]‘, ‘varchar(256)‘),

CONVERT(VARCHAR(50),CONNECTIONPROPERTY(‘client_net_address‘) ) )

GO

–DDL触发器http://msdn.microsoft.com/zh-cn/library/ms175941.aspx

–查看服务器级别的触发器

SELECT TOP 50 * FROM sys.server_triggers

–查看服务器级别的触发器的定义

SELECT * FROM sys.server_sql_modules

–查看激发触发器的数据库事件的信息

SELECT TOP 50 * FROM sys.server_trigger_events

–删除服务器上的DDL触发器

DROP TRIGGER backup_objects ON ALL SERVER

–失效DDL触发器

DISABLE TRIGGER backup_objects ON ALL SERVER

–获取有关数据库范围内的触发器的信息

SELECT * FROM sys.triggers

–获取有关激发触发器的数据库事件的信息

SELECT * FROM sys.trigger_events

–查看数据库范围内的触发器的定义

SELECT * FROM sys.sql_modules

–删除当前数据库上的DDL触发器

DROP TRIGGER backup_objects ON DATABASE

时间: 2024-08-03 15:39:48

SQL Server 存储过程版本控制-DDL触发器的相关文章

存储过程版本控制-DDL触发器

参考:http://www.sqlteam.com/article/using-ddl-triggers-in-sql-server-2005-to-capture-schema-changes USE CedarLog GO CREATE TABLE [dbo].[ChangeLog]( [LogId] [INT] IDENTITY(1,1) NOT NULL, [DatabaseName] [VARCHAR](256) NOT NULL, [EventType] [VARCHAR](50)

SQL Server 存储过程具体解释

SQL Server 存储过程具体解释 存储过程的优缺点 ◆长处: 运行速度更快. 存储过程仅仅在创造时进行编译,而一般SQL语句每运行一次就编译一次,所以使用存储过程运行速度更快. 存储过程用于处理复杂的操作时,程序的可读性更强.网络的负担更小. 使用存储过程封装事务性能更佳. 能有效的放注入,安全性更好. 可维护性高.在一些业务规则发生变化时.有时仅仅需调整存储过程就可以.而不用修改和重编辑程序. 更好的代码重用. ◆ 缺点: 存储过程将给server带来额外的压力. 存储过程多多时维护比較

SQL Server基础之登陆触发器

虽然同表级(DML)触发器和库级(DDL)触发器共顶着一个帽子,但登陆触发器与二者有本质区别.无论表级还是库级,都是用来进行数据管理的,而登陆触发器是纯粹的安全工具. 登陆触发器只响应LOGON事件,在登陆数据库成功后.用户会话未实际建立前触发.登陆数据库失败,如账号密码错误,不会激发登陆触发器.登陆触发器内部的错误消息及PRINT等SQL语句输出信息,统一写到SQL Server 错误日志.登陆触发器可以同时存在多个,但存在多个时,SQL Server不保证所有触发器的执行顺序,只能使用sp_

SQL Server存储过程的初步认知

什么是存储过程? 存储过程就是作为可执行对象存放在数据库中的一个或多个SQL命令.实际上存储过程就是能完成一定操作的一组SQL语句. 为什么要用存储过程? 1.  存储过程只在创造时候编译,以后每次执行存储过程都不需要再重新的编译,而一般的SQL语句每执行一次就需要编译一次,所以使用存储过程可提高数据库执行速度. 2.  当对数据库进行复杂操作时,可将此复杂操作用存储过程封装起来与数据库提供的事物处理结合在一起. 3.  存储过程可以重复的使用,降低开发人员的工作量,提高工作效率. 4.  安全

Sql Server 存储过程中查询数据无法使用 Union(All)

原文:Sql Server 存储过程中查询数据无法使用 Union(All) 微软Sql Server数据库中,书写存储过程时,关于查询数据,无法使用Union(All)关联多个查询. 1.先看一段正常的SQL语句,使用了Union(All)查询: SELECT ci.CustId --客户编号 , ci.CustNam --客户名称 , ci.ContactBy --联系人 , ci.Conacts --联系电话 , ci.Addr -- 联系地址 , ci.Notes --备注信息 , ai

Sql server存储过程中常见游标循环用法

原文:Sql server存储过程中常见游标循环用法 用游标,和WHILE可以遍历您的查询中的每一条记录并将要求的字段传给变量进行相应的处理 DECLARE @A1 VARCHAR(10), @A2 VARCHAR(10), @A3 INT DECLARE YOUCURNAME CURSOR FOR SELECT A1,A2,A3 FROM YOUTABLENAME OPEN YOUCURNAME fetch next from youcurname into @a1,@a2,@a3 while

SQL Server 存储过程(转载)

SQL Server 存储过程 Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用.当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句.这样就可以提高存储过程的性能. Ø 存储过程的概念 存储过程Procedure是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行. 存储过程中可以包含逻辑控制语句和数据操纵语句,它可以接受参数.输出参数.返回单个或多个结果集以及返回值. 由于存储

简单的如何创建sql server存储过程

学习sql server数据库,sql server存储过程的建立方法是一定要知道的,下面将教您如何建立sql server存储过程,希望对您有所帮助. 在对象资源管理器中,连接到某个数据库引擎实例,再展开该实例. 展开“数据库”.sql server存储过程所属的数据库以及“可编程性”. 右键单击“存储过程”,再单击“新建存储过程”. 在“查询”菜单上,单击“指定模板参数的值”. 在“指定模板参数的值”对话框中,“值”列包含参数的建议值.接受这些值或将其替换为新值,再单击“确定”. 在查询编辑

sql server存储过程分页,行变列

CREATE PROCEDURE [dbo].[PROC_GetPriviousAndNextDetailContent]@Index varchar(20),--表主键@Table varchar(100),--从哪个表获取数据@Columns varchar(100),--需要获取哪些字段@OrderStr varchar(100),--排序字段及方式@Where1    varchar(100),--row_number中的初步过滤条件@Where2 varchar(100)--当前要查询