如何使用Microsoft SQL Server Management Studio为数据库中的所有触发器生成脚本

Gra*_*per 57 sql triggers sql-server-2008

我想生成一个包含SQL的SQL脚本来创建我们数据库中存在的所有触发器.触发器是通过SSMS查询窗格直接添加的,因此,除了数据库本身的触发器之外,当前没有其他源.

我已经尝试过右键单击数据库的方法,选择Tasks->Generate Scripts并使用"脚本整个数据库和所有对象"选项.虽然这确实为表和约束创建了一个SQL脚本,但它不会为触发器生成SQL.

我也明白我可以右键单击数据库中的每个触发器并选择Generate SQL Script选项,但是当前有46个表在审计中(For Insert,Update和Delete).

而是为46个表中的每个表手动生成插入,更新和删除触发器脚本,是否有更简单的方法来执行此操作?或者,我应该开始点击,复制和粘贴?

Kap*_*wal 84

数据库 - >任务 - >生成脚本 - >下一步 - >下一步

"选择脚本选项" UI上的"表/视图选项标题"下,将" 脚本触发器"设置为"真".

在此输入图像描述

在此输入图像描述

  • 在SSMS2012中,通过单击"设置脚本选项"步骤中的"高级"找到"选项"对话框. (9认同)
  • 如果你想只生成触发器,你如何使用它? (8认同)

小智 50

我知道答案已被接受,但是想要提供另一种解决方案,因为某些原因SSMS向导无法为触发器生成脚本(在我的例子中是MSSQL2008R2)

这个解决方案基于上面的dana的想法,但是如果超过4000个字符('syscomments'视图的'text'列的限制),则使用'sql_modules'来提供触发器的完整代码

select [definition],'GO' from sys.sql_modules m
inner join sys.objects obj on obj.object_id=m.object_id 
 where obj.type ='TR'
Run Code Online (Sandbox Code Playgroud)

右键单击结果网格,然后将"将结果另存为..."保存到文件并保留格式

  • SELECT sch.name AS schema_name ,parent.name AS table_name ,obj.name AS trigger_name ,m.[definition] AS trigger_definition FROM sys.sql_modules AS m INNER JOIN sys.objects AS obj ON obj.object_id=m.object_id INNER JOIN sys .objects AS parent ON parent.object_id = obj.parent_object_id INNER JOIN sys.schemas AS sch ON sch.schema_id = parent.schema_id WHERE obj.type ='TR' (3认同)

dan*_*ana 7

这个怎么样?

select text from syscomments where text like '%CREATE TRIGGER%'

编辑 - 每个jj的评论如下,syscomments已被弃用,将来会被删除.请使用上面列出的基于向导或基于脚本的解决方案继续前进:)

  • 快速说明:不推荐使用 syscomments(将在 SQL 2014 之后的某个时间删除),Microsoft 建议使用 sys.sql_modules (2认同)