AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 206737
Accepted
mheptinstall
mheptinstall
Asked: 2018-05-16 00:18:49 +0800 CST2018-05-16 00:18:49 +0800 CST 2018-05-16 00:18:49 +0800 CST

具有跨数据库连接的数据库的开发/测试环境

  • 772

我们在 SQL Server 数据库项目中有源代码控制下的现有数据库,其中许多数据库相互引用。

将它们纳入项目和源代码控制非常具有挑战性,尽管我发现在不使用新的 SQL 服务器实例的情况下很难设置开发/测试环境。

目前,我们在一个测试 SQL 实例上有一个数据库副本,它被用作持续部署的一部分。我想要做的是在一个分支中开发并在同一实例上使用 Dev 前缀的数据库,尽管我意识到这些将引用用于持续部署的数据库。

这是否可以通过在数据库引用中使用数据库变量而不仅仅是名称来实现,如果是这样的话,如何以及是否有办法在项目之间共享 SQLCMD 变量?有没有其他方法可以考虑?

ssdt sql-server-2016
  • 2 2 个回答
  • 237 Views

2 个回答

  • Voted
  1. Best Answer
    George.Palacios
    2018-05-16T01:11:51+08:002018-05-16T01:11:51+08:00

    我倾向于建议使用多个 publish.xml 文件,如Jamie Thompson 博客所述

    然后可以将数据库名称(或前缀)存储为 SQLCMD 变量。

    然后将构建每个发布文件并将其发布为构建工件——您需要编写自定义 powershell 或批处理作业以根据服务器名称选择正确的文件。(您可以在此处使用服务器名称作为开关)

    您需要为每个环境设置一次发布文件,但一旦该工作完成,就不需要再做一次。

    • 0
  2. Aaron Bertrand
    2018-05-16T03:23:45+08:002018-05-16T03:23:45+08:00

    在以前的生活中,我在每个环境的不同服务器上管理了一个相当大的实现,其中包含大量相同的数据库以及一些控制数据库。我们有很多跨数据库查询,无论是在开发、QA、测试、预生产、生产等方面,它们都必须以相同的方式工作。我的解决方案——而不是有一些脚本来更新所有服务器和跨数据库引用——是使用同义词。

    在 Dev 中,一切都在一台服务器上:

    CREATE SYNONYM dbo.ControlTable FOR ControlDB.dbo.ControlTable;
    

    在 QA 中,控制表位于另一台服务器上:

    CREATE SYNONYM dbo.ControlTable FOR ControlServerQA.ControlDB.dbo.ControlTable;
    

    现在,任何一个环境中任何数据库中的所有代码都需要简单地引用控制表dbo.ControlTable,并且我们将同义词排除在我们的自动同步/部署之外(除非同义词实际发生变化)。

    如果我们将该表移动到不同的数据库,或者有一个不同名称的数据库,或者将该数据库移动到不同的服务器,我们不必触及任何代码 - 我们只是删除并重新创建同义词。

    在您的情况下,您的开发项目/开发数据库中的同义词可能只是:

    CREATE SYNONYM dbo.tTableName FOR DevPrefixDB.SchemaName.TableName;
    

    在您的生产数据库中:

    CREATE SYNONYM dbo.tTableName FOR DefaultDbName.SchemaName.TableName;
    

    如果你想让同义词名称与对象名称相同,你可以将同义词放在它们自己的模式中:

    CREATE SCHEMA syn;
    GO
    CREATE SYNONYM syn.TableName FOR DefaultDbName.SchemaName.TableName;
    

    再次在开发数据库中,它只是:

    CREATE SCHEMA syn;
    GO
    CREATE SYNONYM syn.TableName FOR DevPrefixDB.SchemaName.TableName;
    

    (现在只需将同义词 - 或该模式 - 作为项目中可单独部署的东西,以避免交叉线。)

    我在这里写了关于同义词的博客。它们是一个非常有用但未被充分利用的功能:

    • #BackToBasics:同义词之美
    • 0

相关问题

  • 我在哪里可以获得 SQL Server 2012 的 master.dacpac 文件?

  • SSDT/SSIS 2012 - 如何自动加载一些项目?

  • 使用 SSDT 发布数据库更改,包括更改列的数据类型

  • 如何查看 Microsoft SQL Server Compact 数据库

  • 在 SSDT 中引用系统视图?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve