No SQL Server existe alguma maneira de obter informações sobre quando as colunas são criadas e quais colunas são novas? Além disso, preciso encontrar qualquer alteração nas colunas, por exemplo, quais tipos de dados das colunas foram alterados. Consigo obter a data de criação e última modificação das tabelas, mas para colunas não encontrei nenhuma consulta para fazer isso. Tentei usar trigger, audit e outras consultas que encontrei em fóruns, mas não obtive o resultado que desejo. Se alguém souber a solução, ajude por favor. Ferramentas de terceiros também são aceitáveis. Desde já, obrigado. Este é o meu código de gatilho:
DROP TABLE IF EXISTS ColumnChanges
CREATE TABLE ColumnChanges (
Id INT IDENTITY(1,1) PRIMARY KEY,
DatabaseName NVARCHAR(100),
TableName NVARCHAR(100),
ColumnName NVARCHAR(100),
ActionType NVARCHAR(50),
OldDataType NVARCHAR(50),
NewDataType NVARCHAR(50),
Add_Modify_Date DATETIME
)
CREATE TRIGGER trg_ColumnChange_AfterAlter
ON DATABASE
FOR ALTER_TABLE
AS
BEGIN
DECLARE @EventData XML
SET @EventData = EVENTDATA()
DECLARE @DatabaseName NVARCHAR(100)
DECLARE @TableName NVARCHAR(100)
DECLARE @ActionType NVARCHAR(50)
DECLARE @NewDataType NVARCHAR(100)
DECLARE @Add_Modify_Date DATETIME
SET @DatabaseName = @EventData.value('(/EVENT_INSTANCE/DatabaseName)[1]', 'NVARCHAR(100)')
SET @TableName = @EventData.value('(/EVENT_INSTANCE/ObjectName)[1]', 'NVARCHAR(100)')
SET @ActionType = 'ADDED/MODIFIED'
SET @NewDataType = @EventData.value('(/EVENT_INSTANCE/AlterTableActionList/Alter/Columns/Column/DataTypeWithCollation)[1]', 'NVARCHAR(100)')
SET @Add_Modify_Date = GETDATE()
DECLARE @ColumnName NVARCHAR(100)
SELECT @ColumnName = COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @TableName
DECLARE @OldDataType NVARCHAR(100)
SELECT @OldDataType = DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME = @ColumnName
INSERT INTO ColumnChanges (DatabaseName, TableName, ColumnName, ActionType,OldDataType,NewDataType, Add_Modify_Date)
VALUES (@DatabaseName, @TableName, @ColumnName, @ActionType, @OldDataType, @NewDataType, @Add_Modify_Date)
END
Este é meu roteiro final. Criei 2 gatilhos, um para rastrear cada nova tabela e suas colunas, outro para rastrear novas colunas e colunas alteradas (alterando tipo de dados). Isso funciona bem para mim.