簡體   English   中英

如何將我的數據庫上的所有sql server管理工作室激活作為可執行的tsql日志?

[英]How can i get all my sql server managment studio activite on my database as a executable tsql log?

我們有一個大型數據庫(許多表,SP,功能和...),我們的數據庫程序員超過10人。 所有主題都可以在我們的主服務器計算機或本地系統上使用數據庫。

我們的要求:

我們希望每個db程序員都可以通過SQL SERVER MANAGMENT STUDIO(或你的建議工具)應用他的定義(創建表,triger,sp,fn&...)和修改(在表,sp,trigers,fn&...上)並在每天結束時將所有這些活動作為TSQL腳本獲取。

因此,我們希望將我們的db程序員活動自動記錄為TSQL腳本(子tsql查詢序列)。 例如:

我的活動:

我的第一個活動>>我打開我的Customer表作為設計模式,右鍵單擊表並單擊Design。 然后我將ID字段的數據類型從INT更改為BigInt。 然后保存

我的第二個活動>>我改變PR_Customer_Insert存儲過程並執行它。

現在我想要一個像這樣的可執行日志:

-- UserName: Ram
-- 2013-02-10 10:20:35
Alter Table ALTER TABLE Customer ALTER COLUMN Id TYPE bigint;
Go


-- UserName: Ram
-- 2013-02-10 10:45:00
Drop Sp DROP PROCEDURE dbo.PR_Customer_Insert;


-- UserName: Ram
-- 2013-02-10 10:45:00
Create sp CREATE PROCEDURE PR_Customer_Insert
@id int,
@name nvarchar(30) AS

 INSERT INTO Customer
 (
    @id,
    @name
 )

GO

我們知道比較兩個數據庫是一個解決方案但我們想要訪問SSMS查詢管道......

我的問題:

這個請求有沒有辦法(自動生成的日志是可執行的TSQL腳本)? 自動生成此腳本的最佳解決方案是什么? 您對數據庫團隊工作中的這個想法有何看法?

謝謝...

可能使用DDL觸發器 ,但在某個數據庫上

簡單的例子:

--Create table EvtLog     
CREATE TABLE EvtLog 
 (
  LoginName NVARCHAR(100),
  PostTime DATETIME,  
  EventType NVARCHAR(100),
  TSQLCommand NVARCHAR(2000)  
  )
GO
--Create the DDL trigger 
CREATE TRIGGER trPreventTblChange 
ON DATABASE
FOR DROP_TABLE, CREATE_TABLE, ALTER_TABLE, 
    DROP_PROCEDURE, CREATE_PROCEDURE, ALTER_PROCEDURE
AS
DECLARE @Data XML
SET @Data = EventData()
INSERT EvtLog (LoginName, PostTime, EventType, TSQLCommand)
SELECT @Data.value('(/EVENT_INSTANCE/LoginName)[1]', 'nvarchar(100)'),
       @Data.value('(/EVENT_INSTANCE/PostTime)[1]', 'nvarchar(100)'),       
       @Data.value('(/EVENT_INSTANCE/EventType)[1]', 'nvarchar(100)'),
       @Data.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'nvarchar(2000)');
GO

設置數據庫DDL觸發器使用EVENTDATA函數查找有關已完成操作的更多信息,並將其插入到可在一天結束時查詢的表中

CREATE TRIGGER [LogDDL] ON DATABASE 
    FOR DDL_DATABASE_LEVEL_EVENTS 
AS 
DECLARE @xml XML;
SELECT @xml = EVENTDATA(); 

INSERT ChangeLog 
( 
    ObjectName, 
    SQL 
)  
VALUES
( 
    @xml.value('(/EVENT_INSTANCE/ObjectName)[1]', 'sysname'), 
    @xml.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'nvarchar(max)') 
);  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM