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
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 ... –
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. –