sql-server - 仅使用脚本向导为触发器生成脚本

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

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

现在我想将它们部署到我的实时环境中。问题是我只想部署触发器。 我尝试了生成脚本向导,但它正在使用表架构和触发器创建脚本,而不仅仅是触发器。

是否有办法生成所有触发器删除并创建类型脚本?

最佳答案

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

关于sql-server - 仅使用脚本向导为触发器生成脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14413573/

相关文章:

sql-server - 如何将存储过程添加到版本控制

mysql - 数据库如何在 B-Tree/B+Tree 内部存储数据

sql-server-2008-r2 - sp_MScheckIsPubOfSub存储过程的问题

c# - 生成数据库创建脚本

sql - T-SQL 在一个查询中创建表和索引

c# - Entity Framework 6 和具有架构名称的存储过程

sql-server - 我可以在 Visual Studio 2012 t-sql 编辑器中定义 #regions 吗?

sql - 丢失空值,使用where过滤sql查询结果

c# - 无法在 sql server 中使用 "Contains"搜索数据

sql-server - 无法保留计算列 - 不确定