2009-08-19 4 views
2

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 

Antwort

1

Ich glaube nicht, dass dies möglich ist, weil der Trigger ausgelöst, nachdem das Ereignisses und so hat die Änderung bereits umgesetzt worden (An STATT TRIGGER wünschen aber für DDL-Triggern nicht verfügbar ist wäre) aufgetreten ist.

Möglicherweise sind die Informationen im EVENTDATA() - XML-Objekt enthalten. Hier finden Sie eine Verknüpfung zur vollständigen Schemareferenz.

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

+1

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

+0

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

Verwandte Themen