SQL Server存储过程还原到上一个

时间:2012-05-30 16:04:56

标签: sql sql-server stored-procedures

我的数据库中存在一个存储过程,它使用Management Studio恢复旧存储过程,Alter存储过程,但不久之后,意外地,存储过程变为{{1}之前的存储过程}!这种情况在过去几个小时内曾多次发生过!

我确信程序中没有任何地方或手动更改存储过程。我检查了所有代理作业,每小时备份只有一个AlterMaintenance job只有一个Replication,但Replication Schema Changes设置为false,存储过程Publication Articles

列表中定义

这种行为还有其他可能的原因吗?我是否需要在SQL Server数据库中手动设置CHECKPOINT?

1 个答案:

答案 0 :(得分:8)

您可以创建一个DDL触发器来记录ALTER_PROCEDURE这样的事件:

CREATE TABLE dbo.AlterLog(EventType VARCHAR(50)
, ObjectName VARCHAR(256)
, ObjectType VARCHAR(25)
, TSQLCommand VARCHAR(MAX)
, LoginName VARCHAR(256)
);
GO

CREATE TRIGGER AlterProcs
ON DATABASE
FOR ALTER_PROCEDURE
AS

SET NOCOUNT ON; 

DECLARE @data XML
SET @data = EVENTDATA()

INSERT INTO dbo.AlterLog(EventType, ObjectName, ObjectType, TSQLCommand, LoginName)
VALUES(@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)')
)
GO