如何自定义 Visual Studio 生成的 SQL 脚本

Posted

技术标签:

【中文标题】如何自定义 Visual Studio 生成的 SQL 脚本【英文标题】:How to customize SQL Scripts generated by Visual Studio 【发布时间】:2017-01-24 17:59:15 【问题描述】:

因此,我们正在尝试在我们的数据库上实现 DDL 触发器,以便为我们的开发人员跟踪 DDL 更改,并且效果很好。但是,我们的 Visual Studio 2013/2015 开发人员遇到了障碍。当他们在 Visual Studio 中编辑表/proc/任何内容时,它将禁用 ddl 触发器、进行更改并重新启用触发器,这使得触发器毫无意义。

我发现我可以创建一个 SQL 数据库项目,导航到项目 > 属性 > 调试 > 高级,然后取消选中“禁用和重新启用 DDL 触发器”。此设置存储在 Project.SQLProj.User 文件中。并且脚本将停止添加禁用/启用触发器部分。

但是,当开发人员只是去服务器资源管理器/SQL Server 对象资源管理器并以这种方式提取数据库表时,只要他们进行更改并运行“更新”并生成脚本,你就会发现禁用/在脚本中重新启用 ddl trigger 语句。我已经梳理了 Visual Studio 帮助文件、谷歌、我们本地的 VS 专家,似乎没有人知道这些动态/非项目范围脚本的设置在哪里。任何帮助将不胜感激。

【问题讨论】:

如果您正在使用数据库项目并将更改提交到版本控制,那么您已经在跟踪更改。 DDL 触发器起什么作用? 这就是问题所在。我们没有使用数据库项目。这只是我发现的唯一可以更改脚本设置的地方,但它始终仅限于那个特定的项目/解决方案。我们经常使用链接服务器,而 SSDT 不能很好地适应我们发现的它们。 “脚本设置”是什么意思? 【参考方案1】:

当您发布时,将使用以下选项。我不知道 .user 文件中的设置有什么影响

如果您使用的是发布对话框窗口,请点击高级,然后取消选择

Disable And Reenable Ddl Triggers

如果您使用类似 yourDb.publish.xml 之类的发布配置文件,则将其添加到您的文件中

<DisableAndReenableDdlTriggers>False</DisableAndReenableDdlTriggers>

如果您使用 SQLPackage.exe 执行此操作,您还可以指定 /p:DisableAndReenableDdlTriggers=false

【讨论】:

【参考方案2】:

Welp,我找到了解决此问题的方法。我仍然无法让 Visual Studio 默认不禁用触发器,但我通过创建服务器级 DDL 触发器来解决它。

服务器级 DDL 触发器将审计服务器和数据库 DDL,并且不会在 VS 发出 disable database ddl trigger 语句时被禁用。

【讨论】:

以上是关于如何自定义 Visual Studio 生成的 SQL 脚本的主要内容,如果未能解决你的问题,请参考以下文章

如何自定义 Visual Studio 生成的 SQL 脚本

Visual Studio 2010:在单个文件上运行自定义构建工具时指定工作目录

自定义 Visual Studio XSD 生成规则

依赖项更改时 Visual Studio 运行自定义构建工具

在 Visual Studio 中将自定义代码添加到 Qt UIC 生成的文件

MSSQL Compact Edition - Visual Studio 生成的数据集与我自己使用 SqlCommand 等或其他可用选项的自定义代码?