SQL SERVER 2008 TRIGGER ON CREATE TABLE

时间:2012-05-02 16:29:29

标签: sql-server sql-server-2008

在SQL SERVER 2008中的数据库中创建表时,有没有办法运行像触发器这样的函数?

2 个答案:

答案 0 :(得分:5)

是的,它被称为DDL触发器。 CREATE TRIGGER的文档包含DROP_SYNONYM的示例(示例中的一个非常可疑的选择),但您需要CREATE_TABLE事件。理解它们如何工作的一个更好的起点可能在这里:

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

如果您有更具体的详细信息,例如你究竟想要传递给这个函数(我假设你的意思是程序),或者程序做了什么,我们可以提供更多有用和具体的帮助。

答案 1 :(得分: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