2

SQL SERVER 2008 のデータベースにテーブルが作成されたときに、トリガーのような機能を実行する方法はありますか?

4

2 に答える 2

6

はい、それはDDLトリガーと呼ばれます。のドキュメントにCREATE TRIGGERDROP_SYNONYM(例として非常に疑わしい選択)のサンプルがありますが、CREATE_TABLE代わりにイベントが必要になります。それらがどのように機能するかを理解するためのより良い出発点は、おそらくここにあります:

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

より具体的な詳細がある場合、たとえば、この関数に正確に何を渡したいか(私はあなたがプロシージャを意味すると思います)、またはプロシージャが何をするかなど、より有用で具体的なヘルプを提供できます。

于 2012-05-02T16:33:00.737 に答える
5

はい、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
于 2012-05-02T20:43:47.370 に答える