Mengetahui Status Trigger per Table di MSSQL Server
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..
kalo pengen kebalikkannya ya tinggal ganti aja statusnya jadi disable..
Menarik khan..
One Response to “Mengetahui Status Trigger per Table di MSSQL Server”
Yup.mnarik jg tu..sering2 share y ko.hehe..
[Reply]
Comment made on October 22nd, 2008 at 9:11Leave a Comment