8

SQL Server 2008 R2 を使用しています。データベースには約 150 のテーブルがあり、各テーブルに対して最近トリガーを作成しました。私のローカル環境では問題なく動作しています。

今、私はそれらを自分のライブ環境にデプロイしたいと考えています。問題は、トリガーのみをデプロイしたいということです。を試しましたGenerate Script wizardが、トリガーのみではなく、トリガーとともにテーブルスキーマを使用してスクリプトを作成しています。

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

4

2 に答える 2

11

ウィザードを忘れてください。コードで手を汚さなければならないと思います。以下のスクリプトは、すべてのトリガーコードを出力し、それをテーブルに格納します。スクリプトの印刷出力をコピーするか、#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
于 2013-01-19T11:23:56.520 に答える