Eine Frage kam in Bezug auf another question in Bezug auf DDL-Trigger. Wenn ich einen DDL-Trigger wie den unten genannten habe, der eine Änderung warnen oder zurücksetzen soll, wenn sich die Parameterliste ändert, gibt es eine Möglichkeit, den vorherigen Zustand von (zum Beispiel) der Parameterliste zu erhalten? Wie Sie sehen können, verweist der Trigger bereits auf die neue Parameterliste, aber gibt es eine Möglichkeit, sie mit der Parameterliste zu vergleichen, wie sie vor der ALTER-Anweisung existierte?Hat ein DDL-Trigger Sichtbarkeit für den vorherigen Status?
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
Die Schema-Definition ist nützlich, aber es sieht nicht wie alle vorherigen Statusinformationen gibt. Ein DML-Trigger findet ebenfalls nach dem Ereignis (Update) statt, aber es gibt Sichtbarkeit für den vorherigen Zustand mit der "gelöschten" Struktur - es gibt offensichtlich nichts dergleichen, aber ich denke, dass es * etwas * geben muss Möglichkeit, zumindest einige Elemente des vorherigen Zustands zu rekonstruieren ... –
Ja genau, weil die Änderung bereits an diesem Punkt aufgetreten ist, können Sie die ursprüngliche Definitionsanweisung nicht aus der Ansicht INFORMATION_SCHEMA.ROUTINES nachschlagen. –