2017-06-22 2 views
1

Je dois détecter l'opération de changement de nom sur les colonnes et les tables. Je peux voir alter, drop et create opération dans cette requête:Comment puis-je détecter les opérations de renommage sur les tables et les colonnes?

DECLARE @filename nvarchar(1000); 

SELECT @filename = cast(value as nvarchar(1000)) 
FROM ::fn_trace_getinfo(default) 
WHERE traceid = 1 and property = 2; 

SELECT * 
FROM fn_trace_gettable(@filename, default) AS ftg 
INNER JOIN sys.trace_events AS te ON ftg.EventClass = te.trace_event_id 
left outer join sys.all_objects o on o.name = ftg.ObjectName 
order by EventSequence DESC; 

Mais quand quelqu'un renomme une table ou d'une colonne sur Management Studio MSSQL, je ne peux pas détecter sur cette requête. Y a-t-il un autre moyen de le faire?

Cordialement.

Répondre

0

Vous pouvez créer un déclencheur de base de données. Liste des événements disponibles: [sys].[events] (il y a des événements ALTER_COLUMN)

Exemple de msdn:

CREATE TRIGGER safety 
ON DATABASE 
FOR DROP_SYNONYM 
AS 
    RAISERROR ('You must disable Trigger "safety" to drop synonyms!',10, 1) 
    ROLLBACK 
GO 
DROP TRIGGER safety 
ON DATABASE; 
GO 

un autre exemple: https://www.mssqltips.com/sqlservertip/2085/sql-server-ddl-triggers-to-track-all-database-changes/

+0

Sur quelle table? sur quel événement? –

+0

sur l'ensemble de la base de données (j'ai édité la réponse) –