2012-05-02 24 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 
関連する問題