【问题标题】:Alter All Triggers via T-SQL通过 T-SQL 更改所有触发器
【发布时间】:2013-03-29 23:37:15
【问题描述】:

有没有办法使用循环 T-SQL 或 C# 代码更新/更改所有触发器?我也需要它来更新我数据库中的所有触发器,因为RAISERROR 命令在 sql server 2012 中发生了变化。

【问题讨论】:

  • 你试过ALTER TRIGGER吗?
  • @LittleBobbyTables 我不是在谈论为每个触发器手动创建更改脚本。我想要的是通过我的每个触发器创建一个循环假设我有 500 个触发器并将指定的语法/命令替换为新的
  • 这不是建议的副本 SO 8607262 的副本。这大约是一个 ALTER TRIGGER;这是关于自动化其中许多。

标签: sql sql-server tsql triggers


【解决方案1】:

您可以使用

获取所有触发器
SELECT [name] FROM [sys].[triggers]

遍历每个触发器并执行

EXEC sp_helptext 'TriggerName'

所以你将拥有它的 create 语句......

【讨论】:

  • 感谢您。也许这是获取创建脚本并将 RAISERROR 语法调整为新脚本的唯一方法。谢谢!!
【解决方案2】:

您可以将所有触发器编写成一个文本文件。见:

How to Generate Scripts For All Triggers in Database Using Microsoft SQL Server Management Studio

然后,您可以使用文本编辑器来替换您需要替换的代码。然后,您可以删除触发器并重新创建它们。我不知道您指的是生产数据库,还是您正在开发的数据库。我从您的问题中假设您已准备好对数据库进行这些重大更改。无论如何,请务必先备份数据库。

【讨论】:

  • 感谢您的链接。我会尝试阅读您发布的链接。而且我也愿意重新创建它们,因为我也别无选择。
  • SQL 遇到错误,OutOfMemoryException 顺便说一下我有 100 多个表,其中大多数表至少有 3 个触发器(删除、插入、更新)。有没有其他方法可以编写脚本?
  • 不知道为什么会出现错误。在脚本中,每个创建语句是用“GO”分隔符分隔的,还是只是一个接一个的 CREATE TRIGGER?尝试在触发器末尾使用 GO 语句分隔每个 CREATE TRIGGER。这将在 SSMS 中将每一个分成单独的批次。
猜你喜欢
  • 2021-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-11
相关资源
最近更新 更多