2012-05-02 97 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