【问题标题】:Visual Studio Database Project Parameterise Database Name in ScriptsVisual Studio 数据库项目在脚本中参数化数据库名称
【发布时间】:2015-05-01 13:44:08
【问题描述】:

我有两个数据库(一个测试数据库和一个实时数据库),它们是在 SSMS 2008 R2 中创建的。我使用 Visual Studio 2010 数据库项目和架构比较从测试环境中吸收架构并控制更改等;一切正常,我准备将整个数据库发布到实时位置。

我遇到的问题是,虽然我很小心地将测试和实时数据库命名为相同的名称,但它们引用了预先存在的测试和实时数据库中不具有相同名称的表。这意味着正确的测试存储过程可能如下所示:

SELECT * FROM TestDatabase.dbo.Customers

但是相同的过程,在发布到直播环境时,需要使用现有直播数据库的不同名称:

SELECT * FROM LiveDatabase.dbo.Customers

在从 Visual Studio 数据库项目发布到实时环境时,我可以对所有脚本进行查找和替换,以将数据库名称替换为另一个,但我不愿意在发布之前直接对脚本进行更改;这样做也意味着 Visual Studio 脚本将不再与测试环境脚本匹配,这会使事情变得混乱并强制检查没有进行“真正”意义更改的地方,更不用说语法中的轻微不规则导致引用被错过了。

所以我的问题是 - 是否有其他方法可以以相当干净的方式更改数据库项目中脚本中的所有引用(例如,通过使用参数化的数据库名称)?

如果需要,我可以轻松地重写存储过程,作为一次性的,但我无法更改预先存在的数据库的名称。

【问题讨论】:

  • 参数化对象(数据库、表、列等)名称的唯一方法是使用动态 SQL。
  • 我明白了;感谢你的回答。我曾希望在预部署脚本或其他东西中可能会有一些东西。嗯嗯。

标签: sql-server visual-studio-2010 visual-studio database-schema


【解决方案1】:

不确定您是否已经找到了答案。如果没有,请尝试将数据库引用添加到数据库项目,命名为“varDatabase”。确保使用此引用将所有脚本签入TFS,而不是硬编码数据库名称。您可以使用 $ 调用此引用,例如 [$(varDatabase)]。 在发布期间,您可以将值作为一件事情传递给此变量。

【讨论】:

  • 除了对 TFS 的引用之外,这确实是解决方案 - 我创建了对两个 LiveDatabaseTestDatabase 的数据库引用,并在我的两个项目中引用了这些。它就像一个魅力。有关详细信息,请参阅此 MSDN 文章:msdn.microsoft.com/en-us/library/dd193259(v=vs.100).aspx
猜你喜欢
  • 1970-01-01
  • 2011-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多