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

Kam*_*eri 0 sql sql-server stored-procedures

在我的数据库中有一个存储过程,它继续恢复到旧的,我Alter使用Management Studio存储过程,但不久之后,意外地,存储过程变为之前的存储过程Alter!这在过去几个小时里已经发生了好几次!

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

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

Joh*_*wey 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
Run Code Online (Sandbox Code Playgroud)