【问题标题】:Generate script for triggers only using script wizard仅使用脚本向导为触发器生成脚本
【发布时间】:2013-01-19 10:51:59
【问题描述】:

我有 SQL Server 2008 R2。我在数据库中有大约 150 个表,并且我最近为每个表创建了触发器。它在我的本地环境中运行良好。

现在我想将它们部署到我的实时环境中。问题是我只想部署触发器。 我尝试了Generate Script wizard,但它正在创建带有表模式以及触发器的脚本,而不是仅触发器。

有没有办法生成所有的触发器drop和create type script?

【问题讨论】:

标签: sql-server sql-server-2008-r2


【解决方案1】:

忘记向导。我认为你必须用代码弄脏你的手。下面的脚本打印所有触发器代码并将其存储到表中。只需复制脚本的打印输出或从#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

【讨论】:

  • 谢谢。尽管我以不同的方式解决了我的问题,但最好使用您的解决方案。非常感谢:)
【解决方案2】:

在第二步(“设置脚本选项”)中的生成脚本向导中按高级按钮=> 表/视图选项=> 将脚本触发器设置为 True。 check also this linkthis。如果您只想要触发器,只需选择一个表即可继续下一步。

【讨论】:

    猜你喜欢
    • 2022-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-20
    • 1970-01-01
    • 1970-01-01
    • 2018-05-30
    • 2013-10-26
    相关资源
    最近更新 更多