sql-server - 如何在Visual Studio中开发t-sql?

标签 sql-server visual-studio-2013 sql-server-data-tools

我们主要使用带有 SSDT 的 Visual Studio 2013 对 t-sql 代码进行版本控制,因此在开发服务器上开发 sql,然后我们使用模式比较将脚本传输到 visual studio(并 checkin Git)。在部署之前(我们目前也使用模式比较)我们必须替换数据库和服务器引用(使用 [$(database)] 等)。如果我们在dev server中改代码再对比,这样的SQLCMD变量又丢失了。 (我希望模式比较足够智能以保留 SQLCMD 变量,但我发现没有办法完成此操作)。

合乎逻辑的步骤是从一开始就在visual studio中开发sql。但到目前为止,很难说服团队中的任何人这样做。可以在VS里写sql执行,没问题。也可以切换成SQLCMD模式执行,就可以了。但是当你创建例如VS中的 View ,你必须写一个create语句,当然可以执行一次,但是当改变 View 并再次执行create语句时会产生错误。

所以我的问题是,是否有人有一些关于如何专门在 Visual Studio 中进行数据库开发的基本技巧。我们能够直接获得数据库引用等所有内容,但无法获得开发过程。

最佳答案

几年来,我一直在使用 Visual Studio 数据库项目简化本地数据库开发和部署。这里有一些提示。

一般...

使用本地数据库实例:每个开发人员都应该在本地安装自己的数据库实例。所有脚本(表、 View 、存储过程等)都应在 Visual Studio 中开发。创建用于将项目部署到本地数据库实例的发布配置文件。

使用发布功能:令人困惑的是,Visual Studio 同时提供了部署和发布选项,它们最终做同样的事情。我建议仅使用 Publish,因为它在 UI 中更为突出,并且您可以创建配置文件来为各种数据库实例配置部署过程。

保持本地数据库最新:当开发人员在数据库项目中进行更改并将其 checkin 源代码管理时,其他开发人员应 checkout 这些更改并将项目重新发布到他们的本地数据库.

创建与更改语句

您的所有语句都应该是 Create 语句。不需要 Alter 语句或存在性检查。一切都应该像第一次创建数据库对象一样编写脚本。当您部署或发布时,VS 会知道是否对现有对象发出 Alter 语句。

数据

一些想法:

  • 将您的数据编写成一系列插入语句。将它们包含在数据库项目的部署后脚本中。但这既乏味又容易出错。

  • 保留一个包含所有测试数据的数据库备份。首次设置开发环境时,从备份创建数据库。在对数据进行重大更改后,创建一个新备份并让您的开发人员从备份中重新创建他们的数据库。在大多数情况下,如果备份与项目中定义的模式不同步也没关系——只需重新发布项目(确保关闭“重新创建数据库”设置,以便只发布差异,从而发布数据不会丢失)。

  • 可能有第 3 方工具可以执行此操作,在这种情况下,它们值得研究。

  • 创建您自己的数据部署解决方案。我的涉及以下内容并且工作得非常好(但需要大量时间和精力!):

    1. 存储在 XML 文件中的所有数据 - 每个表 1 个文件 - 其结构类似于表
    2. 读取 XML 文件并为每行数据生成 SQL 合并(或插入/更新)语句并将其保存到 SQL 脚本的可执行文件
    3. 数据库项目中的预构建事件,用于运行可执行文件并将生成的 SQL 脚本复制到项目中的部署后脚本
    4. 发布项目,后期部署推送数据

测试/生产部署

发布功能:您可以为您的测试和生产环境创建发布配置文件。但是,它将包括您的部署前和部署后脚本,您将无法获得其他选项提供的多功能性。

dacpacs:Ed Elliott 在他的回答中涵盖了它们。优点:无需 Visual Studio 部署,它们可以通过 SQL Management Studio 或带有 sqlpackage.exe 的命令行进行部署,它们比 T-SQL 部署脚本更易于使用。

模式比较:如果您可以使用 Visual Studio 进行部署并且您希望仔细检查所有正在部署的更改,那么模式比较可能会很好。您还可以有选择地忽略更改,这在您没有幸运地拥有完全反射(reflect)生产环境的开发环境时很有用。

关于sql-server - 如何在Visual Studio中开发t-sql?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29282099/

相关文章:

sql - (SQL) 从大列表中提取特定数据,其中某些日期属于特定季度

sql-server - SSIS - 包在 VS 中工作,失败并显示 "Failed to compiled scripts contained in the package"。包中没有脚本对象

visual-studio-2013 - VS2013 新的 MVC 5 项目在上下文菜单中缺少“添加 Controller ”选项

c++ - VS 中具有不同矢量化路径的二进制文件?

reporting-services - 如何通过VSTS构建和部署SSRS项目?

c# - 批量插入,asp.net

asp.net - 在 ASP.NET GridView 中显示分页,即使是单个页面

c# - ClassName() 没有返回任何,片段工具 visual studio 2013

visual-studio - .sqlproj 文件的版本控制

sql-server-data-tools - 如何将 OpenQuery 合并到 SSDT 项目中(无 SQL71501/'unresolved reference to object' 错误)