cja*_*cja 22 sql-server stored-procedures
注意:我不是在问完整的版本控制。
有没有办法自动在 SQL Server 上保存存储过程的历史记录。
类似于 Google Docs 自动保留文档版本历史和维基百科自动保留文章版本历史的方式。
我不希望用户更新存储过程也必须维护存储过程的存储库。这是太多的工作,人们不会这样做。
希望这是我可以在 SQL Server 中打开的功能...
(我所说的存储过程实际上是指函数、触发器等。基本上可编程性下的所有内容。)
我首先发布到/sf/ask/1016555711/因为我怀疑它会在那里获得更多的浏览量。
Aar*_*and 31
虽然我完全同意源代码控制是实现此目的的正确方法,但我也理解并非所有环境都足够规范以单独依赖它(如果有的话),并且有时必须直接进行更改以保留应用程序运行,保存客户端,你有什么。
您可以使用 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)
);
Run Code Online (Sandbox Code Playgroud)
现在在您的数据库中,首先让我们获取我们所说的“初始控制”——存储过程的当前版本:
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;
Run Code Online (Sandbox Code Playgroud)
现在要捕获后续更改,请向数据库添加 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,
EventDDL,
SchemaName,
ObjectName,
DatabaseName,
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]', 'NVARCHAR(255)'),
DB_NAME(), HOST_NAME(), @ip, PROGRAM_NAME(), SUSER_SNAME();
END
GO
Run Code Online (Sandbox Code Playgroud)
随着时间的推移,可以很容易地查看和比较过程的变化,观察新的过程被添加到系统中,看到过程被删除,并且很好地知道与谁谈论这些事件中的任何一个。
更多信息在这里:
http://www.mssqltips.com/sqlservertip/2085/sql-server-ddl-triggers-to-track-all-database-changes/