2009-06-03 9 views
2

SQL Serverインスタンス内のすべてのデータベースに対してDDLトリガーを作成します。私は各データベースのために多くの実行の代わりに1つの実行でそれをしたいと思います。SQL Server 2005インスタンス内のすべてのデータベースに対してDDLトリガーを作成する方法

以下

は私が実行する必要のある2つのT-SQLステートメントです:

-- Create table 

use <dbname> 
GO 
CREATE TABLE dbo.ChangeAttempt 
(EventData xml NOT NULL, 
AttemptDate datetime NOT NULL DEFAULT GETDATE(), 
DBUser char(50) NOT NULL) 
GO 

-- Create DDL trigger 

use <dbname> 
GO 
CREATE TRIGGER db_trg_ObjectChanges 
ON DATABASE 
FOR ALTER_PROCEDURE, DROP_PROCEDURE, 
ALTER_INDEX, DROP_INDEX, 
ALTER_TABLE, DROP_TABLE, ALTER_TRIGGER, DROP_TRIGGER, 
ALTER_VIEW, DROP_VIEW, ALTER_SCHEMA, DROP_SCHEMA, 
ALTER_ROLE, DROP_ROLE, ALTER_USER, DROP_USER 
AS 
SET NOCOUNT ON 
INSERT dbo.ChangeAttempt 
(EventData, DBUser) 
VALUES (EVENTDATA(), USER) 
GO 

私の質問は:どのように私はprogrammaticaly 1回の実行でDDLトリガを作成することができますか?

+0

私はどのようにして私の質問を編集しました... –

+0

これは今どのように速いですか?どのように私は正しい答えを得ることができますが、アップ票がない? –

+0

それは速いです。私はわずか数時間ですべてのSQL Serverへの作成を行うことができます。申し訳ありませんが、私はあなたが「賛成投票」の意味を理解していません。それ、どうやったら出来るの? – titanium

答えて

1

なぜ1回実行する必要がありますか?これが唯一の方法です。

+0

スクリプトをありがとう。それはうまく動作します。 – titanium

+0

忘れてしまいましたが、私はこの種の監査をSQL Server 2000に実装したいと思っています。 – titanium

+0

私はいくつかのサーバーで試してみましたが、出力にはsys.databasesを照会することでできるだけデータベースの一部が欠けています。なぜか、どんな意見ですか? – titanium

0

あなたの共同:あなたが欲しいのdatabase_idの次のコードセクションにありますuldはsp_MSforeachdbを使用します。この

sp_MSforeachdb 
' 
    CREATE TABLE ?.dbo.ChangeAttempt 
     etc. etc. etc. 
' 
sp_MSforeachdb 
' 
    CREATE TRIGGER ?.dbo.db_trg_ObjectChanges 
     etc. etc. etc. 
' 

よう

何か私はそれはしかし動作することを期待したい理論的には、これをテストしていません。しかし、あなたがシステムデータベースを除外していることを確認したい。

関連する問題