データベースの1つで次のスクリプトを実行すると、
SELECT * FROM SYS.triggers
sys.triggers について調べようとすると
トリガーである各オブジェクトの行を含み、タイプはTRまたはTAです。 DMLトリガー名はスキーマスコープであるため、sys.objectsに表示されます。 DDLトリガー名は親エンティティによってスコープされ、このビューでのみ表示されます。
次に、データベーストリガーの定義を取得するにはどうすればよいですか?
OBJECT_DEFINITION()
を使用できます。
ドキュメントからの恥知らずなコピーと貼り付けの例:
次の例では、Personスキーマのユーザー定義トリガーuAddressの定義を返します。組み込み関数OBJECT_IDは、トリガーのオブジェクトIDをOBJECT_DEFINITIONステートメントに返すために使用されます。
USE AdventureWorks2012;
GO
SELECT OBJECT_DEFINITION (OBJECT_ID(N'Person.uAddress')) AS [Trigger Definition];
GO
いかがですか
select m.definition from sys.triggers t
inner join sys.objects o on t.object_id = o.object_id
inner join sys.sql_modules m on m.object_id = o.object_id
object_definition を試しましたが、うまくいくようです。
SELECT
object_id=s.object_id
,parent_name = CASE WHEN s.parent_id = 0 THEN 'DATABASE' ELSE QUOTENAME(OBJECT_SCHEMA_NAME(s.parent_id)) + '.' + QUOTENAME(OBJECT_NAME(s.parent_id)) END
,trigger_name = CASE WHEN s.parent_class = 1
THEN QUOTENAME(OBJECT_SCHEMA_NAME(s.object_id)) + '.' + QUOTENAME(OBJECT_NAME(s.object_id))
ELSE S.name
END
,s.is_disabled
,THE_DEFINITION = object_definition(s.object_id)
FROM sys.triggers s
データベーストリガー定義の1つの貼り付けをコピーする例:
create trigger tr_MStran_alterview
on database
for ALTER_VIEW as
set ANSI_NULLS ON
set ANSI_PADDING ON
set ANSI_WARNINGS ON
set ARITHABORT ON
set CONCAT_NULL_YIELDS_NULL ON
set NUMERIC_ROUNDABORT OFF
set QUOTED_IDENTIFIER ON
declare @EventData xml
set @EventData=EventData()
exec sys.sp_MStran_ddlrepl @EventData, 2