72

データベースに存在するすべてのトリガーを作成するための SQL を含む SQL スクリプトを生成したいと考えています。トリガーは SSMS クエリ ペインを介して直接追加されたため、現在、データベース自体にはトリガー以外のソースはありません。

データベースを右クリックし、Tasks->Generate Scripts「データベース全体とすべてのオブジェクトをスクリプト化する」オプションを選択して使用する方法をすでに試しました。これにより、テーブルと制約用の SQL スクリプトが作成されますが、トリガー用の SQL は生成されません。

また、データベース内の各トリガーを右クリックして [SQL スクリプトの生成] オプションを選択できることも理解していますが、現在、監査対象のテーブルは 46 個あります (挿入、更新、および削除用)。

46 個のテーブルごとに挿入、更新、および削除のトリガー スクリプトを手動で生成するのではなく、これを行う簡単な方法はありますか? それとも、クリック、コピー、および貼り付けを開始する必要がありますか?

4

5 に答える 5

103

データベース -> タスク -> スクリプトの生成 -> 次へ -> 次へ

Choose Script Options UI の [Table/View Options Heading] で、[ Script Triggers] を [True ] に設定します。

ここに画像の説明を入力

ここに画像の説明を入力

于 2012-11-02T17:55:02.503 に答える
60

回答が既に受け入れられていることは知っていますが、何らかの理由で SSMS ウィザードがトリガー用のスクリプトを生成できない場合 (私の場合は MSSQL2008R2 でした) に別の解決策を提供したいと考えています。

このソリューションは、上記のdanaのアイデアに基づいていますが、代わりに「sql_modules」を使用して、4000 文字を超える場合にトリガーの完全なコードを提供します (「syscomments」ビューの「text」列の制限)。

select [definition],'GO' from sys.sql_modules m
inner join sys.objects obj on obj.object_id=m.object_id 
 where obj.type ='TR'

結果グリッドを右クリックし、[結果を名前を付けて保存...] をクリックすると、書式が保持された状態でファイルに保存されます

于 2013-11-28T13:45:06.610 に答える
11

これはどう?

select text from syscomments where text like '%CREATE TRIGGER%'

編集-以下のjjのコメントごとに、syscomments廃止され、将来削除される予定です。上記のウィザードベースまたはスクリプトベースのソリューションを使用してください:)

于 2012-11-02T17:49:44.273 に答える