gpt4 book ai didi

sql-server - SQL部署自动化

转载 作者:行者123 更新时间:2023-12-02 16:56:18 24 4
gpt4 key购买 nike

我正在尝试使用 Jenkins 自动化现有的 sql server 数据库部署自动化。

其中一种自动化方法是使用 Visual Studio 在 SQL 服务器数据库项目中包含 SQL 脚本(存储过程、 View 、表创建)。使用 MSBuild 构建项目并使用 SQLPackage.exe 部署 dacpac。但是,现有数据库引用了存储过程/ View 中的其他数据库,因此我在 SQL Server 数据库项目中导入了其他数据库。此外,在提取现有数据库的 dacpac 时,我遇到了很多错误。我认为这是由于现有代码与 dacpac 不兼容,可能需要更改才能与 dacpac 兼容。

除了使用 SQL Server 数据库项目,还有其他方法可以自动化 SQL Server 代码部署吗?

最佳答案

SSDT 是一个不错的选择,但是您和所有开发人员需要一段时间才能习惯它并了解什么是离线开发和基于状态的部署。您可以自己阅读 SSDT 的工作原理,但对您的建议很少:

  • 对于查询中涉及的每个数据库,您都需要创建项目
  • 如果您在代码中使用了其他数据库,则应将此项目添加为引用
  • 与其在代码中使用 3/4 部分名称(server.database.schema.name 或 database.schema.name),不如为每个对象创建同义词,并在同义词中为服务器和数据库名称使用变量
  • 不要将登录名、用户和权限放入该项目
  • 创建发布配置文件并仔细查看所有设置(例如从部署中排除用户、登录名、权限等)
  • 有一些前/后脚本,您可以在其中创建一些解决方法

大多数人害怕使用 SSDT 完全自动化部署到 PROD,因为脚本是自动生成的,并且对最终部署脚本的控制非常有限(公平地说,您可以使用部署贡献者控制几乎所有内容,但它是另一个讨论的主题)。通常在脚本生成和部署之间有脚本审查步骤。

因此,如果您坚持使用 SSDT,那么适合您的路线图是:

  • 为代码中使用的所有数据库创建项目
  • 使用变量作为数据库和实例名称为项目中来自其他数据库的所有对象创建同义词(非常重要的一点)
  • 对所有外部数据库和实例使用跨多个文件的替换

更换提示。代码中有几种对象名称的组合:

  • 实例.数据库.架构.对象
  • 实例.数据库..对象
  • 实例...对象
  • 所有其他带有 [] 或 ""的组合,例如 [dbo].[SomeTable] 或 [dbo].SomeTable

因此,您可以做的是将所有文件中的 INSTANCE 替换为 $(InstanceName),将 [Database] 替换为 [$(DatabaseName)] 等等。发挥创造力,基本上当您知道该怎么做时,您可以使用这些技巧在几个小时内将几乎所有数据库放入 SSDT。

关于sql-server - SQL部署自动化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56289174/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com