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