2013-01-19 84 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