我想生成一个包含SQL的SQL脚本来创建我们数据库中存在的所有触发器 . 触发器是通过SSMS查询窗格直接添加的,因此,除了数据库本身的触发器之外,当前没有其他源 .
我已经尝试过右键单击数据库的方法,选择 Tasks->Generate Scripts
并使用"Script Entire Database and All Objects"选项 . 虽然这确实为表和约束创建了一个SQL脚本,但它不会为触发器生成SQL .
我也明白我可以右键单击数据库中的每个触发器并选择Generate SQL Script选项,但是当前有46个表在审计中(For Insert,Update和Delete) .
而是为46个表中的每个表手动生成插入,更新和删除触发器脚本,是否有更简单的方法来执行此操作?或者,我应该开始点击,复制和粘贴?
6 回答
Database-> Tasks-> Generate Scripts -> Next -> Next
在 Choose Script Options UI上,在表/视图选项 Headers 下,设置 Script Triggers to True .
我知道答案已被接受,但是想要提供另一种解决方案,因为某些原因SSMS向导无法为触发器生成脚本(在我的例子中是MSSQL2008R2)
此解决方案基于上述dana的想法,但如果超过4000个字符('syscomments'视图的'text'列的限制),则使用'sql_modules'来提供触发器的完整代码
右键单击结果网格,然后将“将结果另存为...”保存到文件并保留格式
这个怎么样?
select text from syscomments where text like '%CREATE TRIGGER%'
EDIT - 根据以下jj的评论,
syscomments
已弃用,将来会被删除 . 请使用上面列出的基于向导或基于脚本的解决方案继续前进:)使用syscomments可能并不总是有效 . syscomments的文本列限制为4000个字符 . 超过该触发器的触发器将被截断 . 您可能无法完全查看它 .
要编写所有触发器的脚本,您可以定义存储过程:
如何执行它:
走
实际上,如果你查看sys.comments表,它有一个colid字段,它是一个数字列;如果它长于最大值,它将具有> 1的数字 . 如果你选择一个> 1 colID并复制它们(如果有2个记录)它会给你整个触发器!