2009-08-19 1 views
2

Une question est venue en relation avec another question concernant les déclencheurs DDL. Si j'ai un déclencheur DDL tel que celui ci-dessous qui est destiné à avertir ou annuler une modification si la liste de paramètres change, existe-t-il un moyen d'obtenir l'état précédent (par exemple) de la liste de paramètres? Comme vous pouvez le voir, le déclencheur fait déjà référence à la nouvelle liste de paramètres, mais est-il possible de la comparer à la liste des paramètres telle qu'elle existait avant l'instruction ALTER?Un déclencheur DDL a-t-il une visibilité sur l'état précédent?

ALTER TRIGGER DDL_PROC 
ON DATABASE 
FOR ALTER_PROCEDURE 
AS 
DECLARE @data XML, @ObjectName sysname, @ParamCount int 
SET @data = EVENTDATA() 
SET @ObjectName = @data.value('(/EVENT_INSTANCE/ObjectName)[1]', 'sysname') 

PRINT 'You have changed procedure: ' + @ObjectName 
SELECT @ParamCount = COUNT(*) FROM sys.parameters 
WHERE object_id = OBJECT_ID(@ObjectName) 
RAISERROR('This procedure now has %i parameter(s)',0,0,@ParamCount) 
GO 

Répondre

1

Je ne crois pas que cela est possible parce que les feux de déclenchement après que l'événement a eu lieu (INSTEAD OF TRIGGER serait souhaitable, mais ne sont pas disponibles pour DDL Triggers) et donc le changement a déjà été mis en œuvre. Peut-être que l'information est contenue dans l'objet XML EVENTDATA().

Voici un lien vers la référence complète du schéma.

http://schemas.microsoft.com/sqlserver/2006/11/eventdata/

+1

La définition du schéma est utile, mais il ne ressemble pas à toute information d'état précédent est là. Un déclencheur DML a également lieu après que l'événement (mise à jour) a eu lieu, mais il y a une visibilité sur l'état précédent avec la structure "supprimée" - il n'y a évidemment rien comme ça, mais je pense qu'il doit y en avoir * façon de reconstruire au moins certains éléments de l'état précédent ... –

+0

Oui précisément parce que la modification a déjà eu lieu à ce stade, vous ne pouvez pas rechercher l'instruction de définition d'origine de dire la vue INFORMATION_SCHEMA.ROUTINES. –

Questions connexes