SQL Server でトリガーの定義 (本体) を取得するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/44034

  •  09-06-2019
  •  | 
  •  

質問

私のニーズを満たす SQL diff ツールが見つからないので、独自に作成しています。INFORMATION_SCHEMA テーブルと sys テーブルの間には、ほぼ完全な作業バージョンがあります。しかし、メタデータで見つからないことが 1 つあります。 意味 トリガーの実際の SQL コードです。私は何か見落としているのでしょうか?

ありがとう。


ありがとう、ピート、それは知りませんでした!

Scott さん、私は DB へのリモート接続を許可しない非常に基本的なホスティング パッケージを使用しています。RedGate の仕様からは (とにかく余裕がないので)、その回避策が提供されているかどうかはわかりません。また、API (Apex の API など) も存在しますが、見つかりませんでした。私の側でさらにプログラミングが必要になるソリューションに投資する意味はありません。:)

私の解決策は、一種の「スキーマ サービス」として機能する ASPX ページをサイトにドロップし、収集されたメタデータを XML として返すことです。任意の数のカタログ インスタンスをマスターと比較し、差分を表示する小さな AJAX アプリをセットアップしました。完璧ではありませんが、私にとっては大きな前進です。

再度、感謝します!

役に立ちましたか?

解決

sp_helptext は、トリガーを構成する SQL を取得するために機能します。

syscomments ビューのテキスト列には、オブジェクトの作成に使用される SQL も含まれています。

他のヒント

2005 年と 2008 年の場合は、 OBJECT_DEFINITION() 関数

SELECT     
    DB_NAME() AS DataBaseName,                  
    dbo.SysObjects.Name AS TriggerName,
    dbo.sysComments.Text AS SqlContent
FROM 
    dbo.SysObjects INNER JOIN 
        dbo.sysComments ON 
        dbo.SysObjects.ID = dbo.sysComments.ID
WHERE   
    (dbo.SysObjects.xType = 'TR') 
    AND 
    dbo.SysObjects.Name = '<YourTriggerName>'

SQLMenace の答えを拡張するために、データベースからすべてのトリガーとその定義を返す簡単なクエリを次に示します。

SELECT 
    sysobjects.name AS trigger_name, 
    OBJECT_NAME(parent_obj) AS table_name,
    OBJECT_DEFINITION(id) AS trigger_definition
FROM sysobjects 
WHERE sysobjects.type = 'TR' 

このクエリは、トリガーの名前と本文を返します。

Select 
    [tgr].[name] as [trigger name], 
    [tbl].[name] as [table name] , 
    OBJECT_DEFINITION(tgr.id) body

    from sysobjects tgr 

    join sysobjects tbl
    on tgr.parent_obj = tbl.id

WHERE tgr.xtype = 'TR'
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top