Sql server 维护alter table的DDL触发器日志

Sql server 维护alter table的DDL触发器日志,sql-server,ddl-trigger,Sql Server,Ddl Trigger,用于维护DDL日志数据的表 CREATE TABLE DDLAudit_All ( AuditID INT IDENTITY PRIMARY KEY, DatabaseName varchar(256), ActionOn varchar(100), Event nvarchar(100), ObjectName varchar(256), TSQL nvarchar(2000), Login varchar(256), E

用于维护DDL日志数据的表

CREATE TABLE DDLAudit_All (
    AuditID INT IDENTITY PRIMARY KEY,
    DatabaseName varchar(256), 
    ActionOn varchar(100),
    Event nvarchar(100), 
    ObjectName varchar(256), 
    TSQL nvarchar(2000), 
    Login varchar(256),
    EventData XML NOT NULL,
    CreatedDate datetime
);
GO
在数据库上创建DDL触发器

CREATE TRIGGER DDL_ALL_Events
ON DATABASE
FOR DDL_DATABASE_LEVEL_EVENTS
AS

DECLARE @ed XML
SET @ed = EVENTDATA()

INSERT INTO DDLAudit_All (DatabaseName, ActionOn, Event, ObjectName, TSQL, Login,EventData,CreatedDate) 
VALUES
(

    @ed.value('(/EVENT_INSTANCE/DatabaseName)[1]', 'varchar(256)'),
    @ed.value('(/EVENT_INSTANCE/ObjectType)[1]', 'varchar(100)'),
    @ed.value('(/EVENT_INSTANCE/EventType)[1]', 'nvarchar(100)'),
    @ed.value('(/EVENT_INSTANCE/ObjectName)[1]', 'varchar(256)'),
    @ed.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'nvarchar(2000)'),
    @ed.value('(/EVENT_INSTANCE/LoginName)[1]', 'varchar(256)'),
    EventData(),
    GetDate()
) ;
创建表格Scritp

CREATE TABLE EmployeeTable_DDL
(  
    Emp_ID INT Identity,  
    Emp_name Varchar(100),  
    Emp_Sal Decimal (10,2) 
) 
在DDLU中插入一条记录,如下所示

+--------------+----------+--------------+-------------------+----------------------------------------------------------------------------------------------------------------------+
| DatabaseName | ActionOn |    Event     |    ObjectName     |                                                         TSQL                                                         |
+--------------+----------+--------------+-------------------+----------------------------------------------------------------------------------------------------------------------+
| Pratice_DB   | TABLE    | CREATE_TABLE | EmployeeTable_DDL | CREATE TABLE EmployeeTable_DDL  (     Emp_ID INT Identity,     Emp_name Varchar(100),     Emp_Sal Decimal (10,2)   ) |
+--------------+----------+--------------+-------------------+----------------------------------------------------------------------------------------------------------------------+
alter table EmployeeTable_DDL alter column Emp_name varchar(200);
+--------------+----------+---------------------+--------------------+------------------------------------------------------------------+
| DatabaseName | ActionOn |        Event        |         ObjectName |                                   TSQL                           |
+--------------+----------+---------------------+--------------------+------------------------------------------------------------------+
| Pratice_DB   | TABLE    |         ALTER_TABLE | EmployeeTable_DDL  | alter table EmployeeTable_DDL alter column Emp_name varchar(200) |
+--------------+----------+---------------------+--------------------+------------------------------------------------------------------+
+--------------+----------+--------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+
| DatabaseName | ActionOn |    Event     |      ObjectName       |                                                                              TSQL                                                                               |
+--------------+----------+--------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Pratice_DB   | TABLE    | CREATE_TABLE | Tmp_EmployeeTable_DDL | CREATE TABLE dbo.Tmp_EmployeeTable_DDL   (   Emp_ID int NOT NULL IDENTITY (1, 1),   Emp_name varchar(300) NULL,   Emp_Sal decimal(10, 2) NULL   )  ON [PRIMARY] |
| Pratice_DB   | TABLE    | ALTER_TABLE  | Tmp_EmployeeTable_DDL | ALTER TABLE dbo.Tmp_EmployeeTable_DDL SET (LOCK_ESCALATION = TABLE)                                                                                             |
| Pratice_DB   | TABLE    | DROP_TABLE   | EmployeeTable_DDL     | DROP TABLE dbo.EmployeeTable_DDL                                                                                                                                |
| Pratice_DB   | TABLE    | RENAME       | Tmp_EmployeeTable_DDL | EXECUTE sp_rename N'dbo.Tmp_EmployeeTable_DDL', N'EmployeeTable_DDL', 'OBJECT'                                                                                  |
+--------------+----------+--------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+
执行T-SQL语句更改数据类型长度,如下所示

+--------------+----------+--------------+-------------------+----------------------------------------------------------------------------------------------------------------------+
| DatabaseName | ActionOn |    Event     |    ObjectName     |                                                         TSQL                                                         |
+--------------+----------+--------------+-------------------+----------------------------------------------------------------------------------------------------------------------+
| Pratice_DB   | TABLE    | CREATE_TABLE | EmployeeTable_DDL | CREATE TABLE EmployeeTable_DDL  (     Emp_ID INT Identity,     Emp_name Varchar(100),     Emp_Sal Decimal (10,2)   ) |
+--------------+----------+--------------+-------------------+----------------------------------------------------------------------------------------------------------------------+
alter table EmployeeTable_DDL alter column Emp_name varchar(200);
+--------------+----------+---------------------+--------------------+------------------------------------------------------------------+
| DatabaseName | ActionOn |        Event        |         ObjectName |                                   TSQL                           |
+--------------+----------+---------------------+--------------------+------------------------------------------------------------------+
| Pratice_DB   | TABLE    |         ALTER_TABLE | EmployeeTable_DDL  | alter table EmployeeTable_DDL alter column Emp_name varchar(200) |
+--------------+----------+---------------------+--------------------+------------------------------------------------------------------+
+--------------+----------+--------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+
| DatabaseName | ActionOn |    Event     |      ObjectName       |                                                                              TSQL                                                                               |
+--------------+----------+--------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Pratice_DB   | TABLE    | CREATE_TABLE | Tmp_EmployeeTable_DDL | CREATE TABLE dbo.Tmp_EmployeeTable_DDL   (   Emp_ID int NOT NULL IDENTITY (1, 1),   Emp_name varchar(300) NULL,   Emp_Sal decimal(10, 2) NULL   )  ON [PRIMARY] |
| Pratice_DB   | TABLE    | ALTER_TABLE  | Tmp_EmployeeTable_DDL | ALTER TABLE dbo.Tmp_EmployeeTable_DDL SET (LOCK_ESCALATION = TABLE)                                                                                             |
| Pratice_DB   | TABLE    | DROP_TABLE   | EmployeeTable_DDL     | DROP TABLE dbo.EmployeeTable_DDL                                                                                                                                |
| Pratice_DB   | TABLE    | RENAME       | Tmp_EmployeeTable_DDL | EXECUTE sp_rename N'dbo.Tmp_EmployeeTable_DDL', N'EmployeeTable_DDL', 'OBJECT'                                                                                  |
+--------------+----------+--------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+
执行上述alter语句后,在DDLU All表中插入一条记录,如下所示

+--------------+----------+--------------+-------------------+----------------------------------------------------------------------------------------------------------------------+
| DatabaseName | ActionOn |    Event     |    ObjectName     |                                                         TSQL                                                         |
+--------------+----------+--------------+-------------------+----------------------------------------------------------------------------------------------------------------------+
| Pratice_DB   | TABLE    | CREATE_TABLE | EmployeeTable_DDL | CREATE TABLE EmployeeTable_DDL  (     Emp_ID INT Identity,     Emp_name Varchar(100),     Emp_Sal Decimal (10,2)   ) |
+--------------+----------+--------------+-------------------+----------------------------------------------------------------------------------------------------------------------+
alter table EmployeeTable_DDL alter column Emp_name varchar(200);
+--------------+----------+---------------------+--------------------+------------------------------------------------------------------+
| DatabaseName | ActionOn |        Event        |         ObjectName |                                   TSQL                           |
+--------------+----------+---------------------+--------------------+------------------------------------------------------------------+
| Pratice_DB   | TABLE    |         ALTER_TABLE | EmployeeTable_DDL  | alter table EmployeeTable_DDL alter column Emp_name varchar(200) |
+--------------+----------+---------------------+--------------------+------------------------------------------------------------------+
+--------------+----------+--------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+
| DatabaseName | ActionOn |    Event     |      ObjectName       |                                                                              TSQL                                                                               |
+--------------+----------+--------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Pratice_DB   | TABLE    | CREATE_TABLE | Tmp_EmployeeTable_DDL | CREATE TABLE dbo.Tmp_EmployeeTable_DDL   (   Emp_ID int NOT NULL IDENTITY (1, 1),   Emp_name varchar(300) NULL,   Emp_Sal decimal(10, 2) NULL   )  ON [PRIMARY] |
| Pratice_DB   | TABLE    | ALTER_TABLE  | Tmp_EmployeeTable_DDL | ALTER TABLE dbo.Tmp_EmployeeTable_DDL SET (LOCK_ESCALATION = TABLE)                                                                                             |
| Pratice_DB   | TABLE    | DROP_TABLE   | EmployeeTable_DDL     | DROP TABLE dbo.EmployeeTable_DDL                                                                                                                                |
| Pratice_DB   | TABLE    | RENAME       | Tmp_EmployeeTable_DDL | EXECUTE sp_rename N'dbo.Tmp_EmployeeTable_DDL', N'EmployeeTable_DDL', 'OBJECT'                                                                                  |
+--------------+----------+--------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+
更改了列的数据类型长度,如 右键单击表名-->选择设计-->将数据长度从200更改为300并保存更改

完成上述过程声明后,在DDLU All表中插入4条记录,如下所示

+--------------+----------+--------------+-------------------+----------------------------------------------------------------------------------------------------------------------+
| DatabaseName | ActionOn |    Event     |    ObjectName     |                                                         TSQL                                                         |
+--------------+----------+--------------+-------------------+----------------------------------------------------------------------------------------------------------------------+
| Pratice_DB   | TABLE    | CREATE_TABLE | EmployeeTable_DDL | CREATE TABLE EmployeeTable_DDL  (     Emp_ID INT Identity,     Emp_name Varchar(100),     Emp_Sal Decimal (10,2)   ) |
+--------------+----------+--------------+-------------------+----------------------------------------------------------------------------------------------------------------------+
alter table EmployeeTable_DDL alter column Emp_name varchar(200);
+--------------+----------+---------------------+--------------------+------------------------------------------------------------------+
| DatabaseName | ActionOn |        Event        |         ObjectName |                                   TSQL                           |
+--------------+----------+---------------------+--------------------+------------------------------------------------------------------+
| Pratice_DB   | TABLE    |         ALTER_TABLE | EmployeeTable_DDL  | alter table EmployeeTable_DDL alter column Emp_name varchar(200) |
+--------------+----------+---------------------+--------------------+------------------------------------------------------------------+
+--------------+----------+--------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+
| DatabaseName | ActionOn |    Event     |      ObjectName       |                                                                              TSQL                                                                               |
+--------------+----------+--------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Pratice_DB   | TABLE    | CREATE_TABLE | Tmp_EmployeeTable_DDL | CREATE TABLE dbo.Tmp_EmployeeTable_DDL   (   Emp_ID int NOT NULL IDENTITY (1, 1),   Emp_name varchar(300) NULL,   Emp_Sal decimal(10, 2) NULL   )  ON [PRIMARY] |
| Pratice_DB   | TABLE    | ALTER_TABLE  | Tmp_EmployeeTable_DDL | ALTER TABLE dbo.Tmp_EmployeeTable_DDL SET (LOCK_ESCALATION = TABLE)                                                                                             |
| Pratice_DB   | TABLE    | DROP_TABLE   | EmployeeTable_DDL     | DROP TABLE dbo.EmployeeTable_DDL                                                                                                                                |
| Pratice_DB   | TABLE    | RENAME       | Tmp_EmployeeTable_DDL | EXECUTE sp_rename N'dbo.Tmp_EmployeeTable_DDL', N'EmployeeTable_DDL', 'OBJECT'                                                                                  |
+--------------+----------+--------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+
使用alter语句更改列的数据长度我们可以很容易地找到哪些列的数据长度已更改,但是使用设计窗口更改列的数据长度我们无法找到哪些列的数据长度已更改

当我们使用设计窗口更改数据长度时,如何知道哪些列数据长度已更改