2012-05-02 118 views

回答

5

是的,它被稱爲DDL觸發器。 CREATE TRIGGER的文檔有DROP_SYNONYM的示例(對於示例來說,這是一個非常可疑的選擇),但您需要改爲CREATE_TABLE事件。瞭解他們是如何工作的一個更好的起點可能是在這裏:

http://msdn.microsoft.com/en-us/library/ms190989.aspx

如果你有更具體的細節,例如你想傳遞給這個函數到底是什麼(我假定你是指過程),或者過程是做什麼的,我們可以提供更多有用的和特定的幫助。

+0

thanx,我這是我正在尋找的。 – themis

4

是DDL觸發器。例如,下面是我編寫的一些代碼,以防止某些表被修改:

PRINT N'Create DDL trigger to prevent changes to various tables' 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
CREATE TRIGGER NoEditCertainTables ON DATABASE 
    FOR DROP_TABLE, ALTER_TABLE, CREATE_TABLE 
AS 

SET CONCAT_NULL_YIELDS_NULL ON 

DECLARE @AffectedTable varchar(255) 
SELECT @AffectedTable = EVENTDATA().value('(/EVENT_INSTANCE/ObjectName)[1]','nvarchar(100)') 

--This is the name of the table(s) you dont want messed with 
IF (@AffectedTable IN ('Table1','Table2','Table3')) 
BEGIN 
    ROLLBACK; 
END 
SET CONCAT_NULL_YIELDS_NULL OFF  

GO