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..
Popularity: 5% [?]









Yup.mnarik jg tu..sering2 share y ko.hehe..
Reply
Seperti yang saya butuhkan. Thanks for sharing.
Reply
hi..
mau nanya nih,
saya punya database,suppose namanya PTX,nah di PTX itu kan banyak tabel,misal ada 10 tabel,dengan nama,
A1..A10.
Nah ada suatu program,mengunakan database itu.
pertanyaan saya, bagaimana saya tau,saat eksekusi suatu perintah di program (misal save data), tabel mana yang terupdate.mhh..kalo di windows explorer kan saya bisa dengan mudah,sortir aja based datemodified,ketauan deh.Kalo di sql bagaimana yah?
terima kasih,hatur nuhun.
Reply
ndro Reply:
June 24th, 2009 at 08:39
Bisa Mas Poldan.. tinggal buka SQL Profiler.. disana akan kelihatan proses yang dilakukan di database nya apa saja.. termasuk T-SQL nya..
Reply