2008-09-04 9 views
15

私のニーズを満たすSQL差分ツールを見つけることができません。私は自分で作成しています。 INFORMATION_SCHEMAテーブルとsysテーブルの間には、ほとんど完全な作業バージョンがあります。しかし、私がメタデータで見つけることができない1つのことは、の定義トリガー、あなたが知っている、実際のSQLコードです。私は何か見落としていますか?SQL Serverでトリガの定義(本文)を取得するにはどうすればよいですか?

ありがとうございました。


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

Scott、私はDBへのリモート接続を許可しない非常に基本的なホスティングパッケージを扱っています。私はRedGateの仕様からわからない(どうにか買えない)彼らがその回避策を提供しているかどうか、APIがある(Apexからのものなど)があるが、私は私はまだまだプログラミングを必要としているソリューションに投資することを指摘しています。 :)

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

もう一度おねがいします!

+0

は、 'sp_helptext'等、任意のトリガー、ビュー、ストアドプロシージャ、ファンクションの後ろにSQLを明らかにするのに非常に有用である2005年の –

答えて

15

sp_helptextは、トリガを構成するSQLを取得します。

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

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' 
14

は、2005および2008の場合は、あなたがSQLMenaceの答えに展開するOBJECT_DEFINITION()機能

+2

..work - 2012 - https://でMSDN Microsoft.com/ja-us/library/ms176090%28v = sql.110%29.aspx – Milan

10
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>' 
1

を使用することができ、ここでは、データベースからすべてのトリガとその定義を返す単純なクエリですクエリーリターントリガーの名前と本文を返します。

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' 
ピートが書いたものに拡大すること
関連する問題