【问题标题】:Custom script files in VS2012 Sql server projectVS2012 Sql server项目中的自定义脚本文件
【发布时间】:2014-07-11 10:35:26
【问题描述】:

我应该将数据库迁移到 VS2012 sql server 项目中。我已经从目标数据库中导入了所有模式。种子数据将添加到项目中的部署后脚本中。但是,我也预见到开发人员在进行各种增强时会添加许多脚本。这些可以是更改模式脚本以及数据添加编辑删除脚本。所有这些都必须按顺序运行部署后,理想情况下是脚本名称执行 1.0.0.0,然后是 1.0.0.2,然后是 1.0.1.0。 SQL Server 项目不允许多个部署后文件。我在网上只能找到如何创建一个项目,而没有人谈论创建一个结构,该结构将考虑到开发人员在不同发布周期中所做的更改(更改脚本)。有人可以在这里帮助我吗?

【问题讨论】:

  • 为了使用多个部署后脚本,您需要将您的一个主要部署后脚本标记为构建类型的“部署后”,然后在该脚本中使用“:r .\script.sql" 包含实际脚本的 sqlcmd 语法。然而,正如 Keith 所指出的,您应该让项目处理 99% 的情况下的模式更改。这就是它的设计目的。很少,您可能必须在部署后脚本中进行架构更改,但在必要之前,我会尽量避免它。
  • 是的,部署后架构更新脚本的需求应该非常少。你真的有需要吗?如果有,你能举个例子吗?
  • 除了模式更新之外,多个数据插入更新脚本是我的担心。表的种子数据会随着产品功能的增加而增加。例如,如果我正在创建一个贷款管理系统,我会在表中播种 Loan(InProcess、Rejected、Granted)的状态。同样,对于每个正在处理的增强/故事可能需要一些种子数据存在于系统中。我无法理解这将如何处理。当然,将所有这些数据放在一个部署后脚本中并不是一个好主意。

标签: visual-studio-2012 database-project sql-server-data-tools database-deployment


【解决方案1】:

Schema Comparison 无需编写自己的更改脚本。架构比较通过将数据库项目的架构与您的数据库服务器进行比较,自动为您创建更改脚本。

这是一个很好的walk-through of Schema Comparison

【讨论】:

  • 感谢基思,我认为这将解决我的架构脚本问题。但是,我正在解决有关处理数据脚本的问题。任何系统都需要一些种子数据,并且随着功能数量的增加而增长。我将如何处理这些脚本。这些数据脚本也必须进行版本控制,因为它需要具有根据特定版本从源代码控制中提取代码库的灵活性。
  • 不幸的是,VS 没有提供直接的解决方案。我认为最常见的方法是创建一个插入种子数据的部署后脚本。或者,您可以将种子数据作为实体框架/其他 ORM 层的一部分插入。
【解决方案2】:

好的,这就是我到目前为止所做的。

  • 按照 Keith 的意见创建了一个项目
  • 使用架构比较来处理基于架构的更改
  • 使用 Build Action = PostDeploy 创建了一个主脚本
  • 对于数据脚本,创建了以版本命名的文件夹,以根据不同版本隔离脚本
  • 在主部署后脚本中添加了这些脚本的条目,语法为 :r Folder\MyScript.sql

这暂时可行,但应该有更好的方法来确保在主部署后脚本中自动拾取文件夹中的自定义脚本。使用此解决方案,每次开发人员添加脚本时,都必须在主部署脚本中输入一个条目(:r MyCustomeDataScript.sql)

我认为可能有更好的方法来做到这一点,但我不知道。我正在努力寻找一种方法,可以自动在主部署脚本中手动输入新脚本。

【讨论】:

  • 您可以为此考虑使用 Red-Gate 的 SQL Data Compare 等产品。如果您可以在某处保留带有数据的数据库的“主”副本,则可以使用它来生成“种子”脚本。我不知道您需要支持多少个版本,但是如果您不支持多个版本,您也许可以稍微简化这些脚本。但是,您确实需要有纪律才能签入和使用这些数据插入脚本。 (不一定很糟糕,因为它可以确保你发布时不会错过它们,但可能会很乏味)
猜你喜欢
  • 1970-01-01
  • 2012-02-18
  • 1970-01-01
  • 2012-08-15
  • 1970-01-01
  • 1970-01-01
  • 2015-03-25
  • 1970-01-01
  • 2016-01-13
相关资源
最近更新 更多