Mengetahui Status Trigger per Table di MSSQL Server

by: ndro Tuesday, October 21st, 2008

Baru aja hari ini aku sempet bingung juga gara-gara semua data yang masuk ke database kantor kok nggak update ya.. setelah di telusuri ternyata ada trigger yang tidak update.. setelah di beri perintah

alter table <tablename> enable trigger all 

Akhirnya jalan juga tu trigger dan data terupdate..
tapi.. beberapa waktu kemudian, data di table yang lain mengalami hal yang sama.. bingung juga khan.. kemungkinan pertama pasti karena triggernya juga.. wah nggak aktif juga.. wah repot banget nih kl kudu cek satu-satu..

Cari referensi di internet….

Akhirnya nemu script buat cek status trigger.. ada di sini nih..
scriptnya seperti ini…

SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO 

CREATE  FUNCTION dbo.fnTriggerStatus
       ( @TABLENamePattern AS SYSNAME = NULL -- Tables to show,
                                         -- NULL for all
         )
RETURNS TABLE
AS RETURN
       SELECT TOP 100 PERCENT WITH TIES
                T.[name] AS TableName, TR.[Name] AS TriggerName,
                CASE WHEN 1 = OBJECTPROPERTY(TR.[id], 'ExecIsTriggerDisabled')
                     THEN 'Disabled'
                     ELSE 'Enabled'
                END Status
       FROM     sysobjects T
                INNER JOIN sysobjects TR ON t.[ID] = TR.parent_obj
       WHERE    ( T.xtype = 'U'
                  OR T.XType = 'V'
                )
                AND ( @TableNamePattern IS NULL
                      OR T.[name] LIKE @TableNamePattern
                    )
                AND ( TR.xtype = 'TR' )
       ORDER BY T.[name], TR.[name]
GO 

GRANT SELECT ON fnTriggerStatus TO PUBLIC
GO

Cara eksekusinya ya kaya function biasa

--Jika pengen tahu semua status tabelnya
select * from fnTriggerStatus(null) 

--Jika pengen tahu semua status trigger di <tablename>
select * from fnTriggerStatus(<tablename>) 

Trus.. ada satu masalah lagi.. gimana caranya untuk enable semua trigger yang status disable.. Ya dengan sedikit tricky.. gini caranya..

Eksekusi query ini..

SELECT DISTINCT 'alter table ' + tablename + ' enable trigger all' 
FROM fntriggerstatus(null) WHERE status = 'Disabled'

hasilnya

akan seperti ini :

alter table <namatabel1> enable trigger all
alter table <namatabel2> enable trigger all
alter table <namatabel3> enable trigger all

nah.. hasil eksekusi itu di copy-paste ke query analyzer.. lalu lgs eksekusi.. viola.. semua trigger yang disable lgs jadi enable lagi.. :D

kalo pengen kebalikkannya ya tinggal ganti aja statusnya jadi disable..

Menarik khan.. :D

 

One Response to “Mengetahui Status Trigger per Table di MSSQL Server”

Nena Said:

Yup.mnarik jg tu..sering2 share y ko.hehe..

[Reply]

Comment made on October 22nd, 2008 at 9:11
 

Leave a Comment