0

我的数据库中有一个存储过程,它不断恢复到旧的,我Alter使用 Management Studio 存储过程,但是一段时间后,出乎意料的是,存储过程更改为之前的存储过程Alter!在过去的几个小时里,这种情况发生了好几次!

我确定程序内部没有任何地方或手动更改存储过程。我检查了所有代理作业,只有一个Maintenance job用于每小时备份,另一个用于Replication,但是Replication Schema Changes设置为false,并且存储过程在列表中定义Publication Articles

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

4

1 回答 1

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
于 2012-05-30T16:49:21.460 回答