This is more or less the query that SqlSpec uses:select --distinct s.name ,ss.name as tablename ,s.crdate as created ,ObjectProperty(s.id, 'ExecIsUpdateTrigger') as isUpdate ,ObjectProperty(s.id, 'ExecIsDeleteTrigger') as isDelete ,ObjectProperty(s.id, 'ExecIsInsertTrigger') as isInsert ,ObjectProperty(s.id, 'ExecIsAfterTrigger') as isAfter ,ObjectProperty(s.id, 'ExecIsInsteadOfTrigger') as isInsteadOf ,ObjectProperty(s.id, 'ExecIsFirstDeleteTrigger') as isFirstDelete ,ObjectProperty(s.id, 'ExecIsLastDeleteTrigger') as isLastDelete ,ObjectProperty(s.id, 'ExecIsFirstInsertTrigger') as isFirstInsert ,ObjectProperty(s.id, 'ExecIsLastInsertTrigger') as isLastInsert ,ObjectProperty(s.id, 'ExecIsFirstUpdateTrigger') as isFirstUpdate ,ObjectProperty(s.id, 'ExecIsLastUpdateTrigger') as isLastUpdate ,ObjectProperty(s.id, 'ExecIsTriggerDisabled') as isDisabled ,ObjectProperty(s.id, 'ExecIsTriggerNotForRepl') as isNotForReplicationfrom sysobjects s join sysobjects ss on s.parent_obj=ss.idwhere s.xtype in ('TR') order by 1 ascto get the DDL:select so.id ,so.name ,case when sc.encrypted=0 then sc.text else '*** code is encrypted ***' end as codefrom sysobjects so join syscomments sc on so.id=sc.idwhere 1=1 and so.xtype in ('TR') order by so.id, sc.colidnote that if the code is long, it may be broken up in to multiple rows in that second query.
elsasoft.org