5

We have a requirement for which we want to have Red Gate Source Control as a part of the Automated Interface.

We would like to programatically Link the Required Database and do Commit for the Changes to the Database.

Is this possible? If yes, which api should we use?

4

4 回答 4

2

我知道这个问题很老,但我正在做你所描述的。

我有一项工作每 X 分钟运行一次,并将数据库的当前状态放入版本控制中(对我们来说它是反复无常的,但您可以使用 git 或其他方式实现完全相同的目标)。

cd c:\data\SourceCodeDirectory
hg pull
hg update
if not exist "c:\data\SourceCodeDirectory\databaseName" mkdir "c:\data\SourceCodeDirectory\databaseName"
cd "c:\Program Files (x86)\Red Gate\SQL Compare 11"
sqlcompare /s1:DBServer /db1:databaseName /scr2:"c:\data\SourceCodeDirectory\databaseName" /synchronize

cd c:\data\SourceCodeDirectory\databaseName
hg add
hg commit -m "Database Changes" -u DatabaseSchemaUser
hg push

一旦此作业运行,对数据库所做的任何更改都将在版本控制中。

于 2016-07-20T15:47:06.067 回答
0

也许这应该是一条评论,但我需要那里没有的格式和空间。

像这样的“自动提交”通常是有风险的,因为它们有破坏原子性和丢失信息的风险。考虑以下场景:

  1. 两名开发人员正在对数据库进行独立更改。他们都同时更改了各自的表,并且这种自动化将其拾取并将表更改作为一个单元提交。你如何区分这两个活动?
  2. 发生上述情况时,谁的名字会出现在存储库更改日志中?
  3. 一位开发人员正在进行一项涉及对多个表和存储过程进行更改的广泛更改。这种自动化独立地提交每一个。您如何“捆绑”这些以进行日志记录和审核、审查所做的更改等?
  4. 在我的环境中,提交到代码存储库的每个更改都需要在提交消息中记录一个更改 ID。这将如何在这里工作?

我的建议是您更改要求。出现意外(坏)后果的方式太多了。

于 2013-07-29T11:30:20.427 回答
0

这是一个艰难的。根据您的自动化方式,您可以使用其他程序的组合。例如,如果您有某种 CI 系统,您可以使用 SQL Compare 自动将源代码控制中的文件与实时数据库进行比较,并告诉它进行同步。您将需要源代码控制系统的命令行界面来检查更改。

SQL Source Control,作为一个软件,被设计为只能交互工作。

如果您想在代码(c#、VB)中执行此操作,那么您可以利用源代码控制系统的 API 来签入文件(如果有的话)。例如,SVN 有“SharpSVN”,还有一个用于 TFS 的 API。

于 2013-07-29T10:23:34.143 回答
0

您是否将其作为自动化构建过程的一部分?如果是这样,了解您正在使用的构建工具和源代码控制工具会很有帮助。

这应该提供一些有用的资源:

http://www.red-gate.com/products/sql-development/sql-automation-pack/

有 NAnt 和 MSBuild 脚本可以为您的 SQL Server 数据库执行有用的构建/测试任务。如果你想做一些更自定义的事情,你可以结合使用你的版本控制系统命令行和 SQL 比较命令行。

于 2013-08-05T15:57:53.503 回答