July 31, 2009 – 11:20 | No Comment

Kadang waktu kita membuat program membutuhkan daftar table di database kita.. kalau kita melakukannya dengan mengetik satu-satu daftar table kita, itu bukan satu solusi.. bayangkan kalau database kita berkembang, wah.. bisa kerjaanya mendaftar nama-nama table …

Read the full story »
artikel

gadget

gallery

IT

Home » IT, SQL Script

Mengetahui Status Trigger per Table di MSSQL Server

Submitted by ndro on October 21, 2008 – 16:024 Comments

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

 

Popularity: 5% [?]

4 Comments »

  • Nena says:

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

    Reply

  • Fredy says:

    Seperti yang saya butuhkan. Thanks for sharing.

    Reply

  • poldan says:

    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:

    Bisa Mas Poldan.. tinggal buka SQL Profiler.. disana akan kelihatan proses yang dilakukan di database nya apa saja.. termasuk T-SQL nya..

    Reply

Leave a comment!

Add your comment below, or trackback from your own site. You can also subscribe to these comments via RSS.

Be nice. Keep it clean. Stay on topic. No spam.

You can use these tags:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

This is a Gravatar-enabled weblog. To get your own globally-recognized-avatar, please register at Gravatar.