2013-01-19 11 views
7

私はSQL Server 2008 R2を持っています。私は約150のテーブルをデータベースに持っていて、各テーブルについて私は最近トリガーを作成しました。私のローカル環境ではうまくいきます。スクリプトウィザードを使用してのみトリガーのスクリプトを生成

今私はそれらを私のライブ環境に展開したいと思います。問題は、私はトリガだけを配備したいということです。 私はGenerate Script wizardを試しましたが、トリガーと一緒にテーブルスキーマを持つスクリプトを作成しているだけで、トリガーはありません。

トリガードロップを作成してタイプスクリプトを作成する方法はありますか?

+1

詳細オプションを使用してください。この回答を参照してください: http://stackoverflow.com/a/13200622/139388 –

答えて

8

ウィザードを忘れてしまった。私はコードで手を汚さなければならないと思います。以下のスクリプトは、すべてのトリガーコードを出力し、テーブルに格納します。スクリプトの印刷出力をコピーするか、#triggerFullTextから取得してください。

USE YourDatabaseName 
GO 
SET NOCOUNT ON; 

CREATE TABLE #triggerFullText ([TriggerName] VARCHAR(500), [Text] VARCHAR(MAX)) 
CREATE TABLE #triggerLines ([Text] VARCHAR(MAX)) 

DECLARE @triggerName VARCHAR(500) 
DECLARE @fullText VARCHAR(MAX) 

SELECT @triggerName = MIN(name) 
FROM sys.triggers 

WHILE @triggerName IS NOT NULL 
BEGIN 
    INSERT INTO #triggerLines 
    EXEC sp_helptext @triggerName 

    --sp_helptext gives us one row per trigger line 
    --here we join lines into one variable 
    SELECT @fullText = ISNULL(@fullText, '') + CHAR(10) + [TEXT] 
    FROM #triggerLines 

    --adding "GO" for ease of copy paste execution 
    SET @fullText = @fullText + CHAR(10) + 'GO' + CHAR(10) 

    PRINT @fullText 

    --accumulating result for future manipulations 
    INSERT INTO #triggerFullText([TriggerName], [Text]) 
    VALUES(@triggerName, @fullText) 

    --iterating over next trigger 
    SELECT @triggerName = MIN(name) 
    FROM sys.triggers 
    WHERE name > @triggerName 

    SET @fullText = NULL 

    TRUNCATE TABLE #triggerLines 
END 

DROP TABLE #triggerFullText 
DROP TABLE #triggerLines 
+1

ありがとう。問題を別の方法で解決しましたが、ソリューションを使用する方が良いです。どうもありがとう :) – Dev

関連する問題