2
與another question有關的DDL觸發器出現了一個問題。如果我有一個DDL觸發器,比如下面的DDL觸發器,它是爲了在參數列表發生變化時發出警告或回滾更改,是否有辦法獲取(例如)參數列表的前一個狀態?正如你所看到的,觸發器已經引用了新的參數列表,但是有沒有一種方法可以與ALTER語句之前的參數列表進行比較?DDL觸發器是否能看到以前的狀態?
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
架構定義是有幫助的,但它並不像以前的任何狀態信息是存在的。 DML觸發器也發生在事件(更新)發生之後,但是可以看到前一個狀態爲「已刪除」的結構 - 顯然沒有這種情況,但我認爲必須有一些*重建至少一些以前狀態的元素的方法... – 2009-08-19 15:40:05
是的,因爲這一點已經發生了變化,所以您無法從INFORMATION_SCHEMA.ROUTINES視圖中查找原始定義語句。 – 2009-08-19 16:00:24