加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

sql-server – 如何保留SQL Server存储过程修订的历史记录

发布时间:2021-05-24 02:57:21 所属栏目:编程 来源:网络整理
导读:留意:我不是在扣问完备版本节制. 有没有步伐自动生涯SQL Server上的存储进程的汗青记录. 与Google Docs自动生涯文档版本汗青的方法相同,Wikipedia会自动保存文章版本的汗青记录. 我不但愿用户更新存储进程也要维护存储进程的存储库.这是太多的事变,人们不会

留意:我不是在扣问完备版本节制.

有没有步伐自动生涯SQL Server上的存储进程的汗青记录.

与Google Docs自动生涯文档版本汗青的方法相同,Wikipedia会自动保存文章版本的汗青记录.

我不但愿用户更新存储进程也要维护存储进程的存储库.这是太多的事变,人们不会这样做.

但愿这是我可以在SQL Server中打开的对象……

(而且通过存储进程我的意思是函数,触发器等.根基上全部都在可编程性下.)

我宣布到https://stackoverflow.com/questions/14522224/how-to-keep-history-of-sql-server-stored-procedure-revisions起首我猜疑它会获得更多的意见.

办理要领

固然我完全赞成源代码打点是实现这一方针的正确要领,但我也大白,并非全部情形都足够严酷,只能单独行使(假若有的话),而且偶然必要变动才气直接保存应用措施运行,生涯客户端,你有什么.

您可以行使DDL触发器将表中的全部修订保存在单独的数据库中(虽然,常常备份该数据库).假设您有一个适用措施数据库:

USE Utility;
GO


CREATE TABLE dbo.ProcedureChanges
(
    EventDate    DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,EventType    NVARCHAR(100),EventDDL     NVARCHAR(MAX),DatabaseName NVARCHAR(255),SchemaName   NVARCHAR(255),ObjectName   NVARCHAR(255),HostName     NVARCHAR(255),IPAddress    VARCHAR(32),ProgramName  NVARCHAR(255),LoginName    NVARCHAR(255)
);

此刻在您的数据库中,起首让我们抓住我们称之为“初始节制”的对象 – 当前版本的存储进程:

USE YourDB;
GO

INSERT Utility.dbo.ProcedureChanges
(
    EventType,EventDDL,DatabaseName,SchemaName,ObjectName
)
SELECT
    N'Initial control',OBJECT_DEFINITION([object_id]),DB_NAME(),OBJECT_SCHEMA_NAME([object_id]),OBJECT_NAME([object_id])
FROM
    sys.procedures;

此刻要捕捉后续变动,请向数据库添加DDL触发器:

USE YourDB;
GO

CREATE TRIGGER CaptureStoredProcedureChanges
    ON DATABASE
    FOR CREATE_PROCEDURE,ALTER_PROCEDURE,DROP_PROCEDURE
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @EventData XML = EVENTDATA(),@ip VARCHAR(32);

    SELECT @ip = client_net_address
        FROM sys.dm_exec_connections
        WHERE session_id = @@SPID;

    INSERT Utility.dbo.ProcedureChanges
    (
        EventType,ObjectName,HostName,IPAddress,ProgramName,LoginName
    )
    SELECT
        @EventData.value('(/EVENT_INSTANCE/EventType)[1]','NVARCHAR(100)'),@EventData.value('(/EVENT_INSTANCE/TSQLCommand)[1]','NVARCHAR(MAX)'),@EventData.value('(/EVENT_INSTANCE/SchemaName)[1]','NVARCHAR(255)'),@EventData.value('(/EVENT_INSTANCE/ObjectName)[1]',HOST_NAME(),@ip,PROGRAM_NAME(),SUSER_SNAME();
END
GO

跟着时刻的推移,将很轻易看到和较量措施的变革,调查新的措施被添加到体系,看到措施被删除,并很好地相识谁与任何这些变乱发言.

更多信息:

http://www.mssqltips.com/sqlservertip/2085/sql-server-ddl-triggers-to-track-all-database-changes/

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读