SQL SERVER 2008 のデータベースにテーブルが作成されたときに、トリガーのような機能を実行する方法はありますか?
6873 次
2 に答える
6
はい、それはDDLトリガーと呼ばれます。のドキュメントにCREATE TRIGGER
はDROP_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 に答える