【发布时间】:2016-07-20 23:47:06
【问题描述】:
我们有一个要求,我们希望将 Red Gate 源代码控制作为自动化界面的一部分。
我们希望以编程方式链接所需的数据库并提交对数据库的更改。
这可能吗?如果是,我们应该使用哪个 api?
【问题讨论】:
我们有一个要求,我们希望将 Red Gate 源代码控制作为自动化界面的一部分。
我们希望以编程方式链接所需的数据库并提交对数据库的更改。
这可能吗?如果是,我们应该使用哪个 api?
【问题讨论】:
我知道这个问题很老,但我正在做你所描述的事情。
我有一项工作,每 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
一旦此作业运行,对数据库所做的任何更改都将在版本控制中。
【讨论】:
这是一个艰难的过程。根据您的自动化方式,您可以使用其他程序的组合。例如,如果您有某种 CI 系统,您可以使用 SQL Compare 自动将源代码控制中的文件与实时数据库进行比较,并告诉它进行同步。您需要源代码控制系统的命令行界面来检查更改。
SQL 源代码控制作为一种软件,旨在仅以交互方式工作。
如果您想在代码(c#、VB)中执行此操作,那么您可以利用源代码控制系统的 API 来签入文件(如果有的话)。例如,SVN 有“SharpSVN”,还有一个用于 TFS 的 API。
【讨论】:
也许这应该是一条评论,但我需要那里没有的格式和空间。
像这样的“自动提交”通常是有风险的,因为它们有破坏原子性和丢失信息的风险。考虑以下场景:
我的建议是更改要求。出现意外(坏)后果的方式太多了。
【讨论】:
您是否将此作为自动化构建过程的一部分?如果是这样,了解您使用的构建工具和源代码控制工具会很有帮助。
这应该提供一些有用的资源:
http://www.red-gate.com/products/sql-development/sql-automation-pack/
有 NAnt 和 MSBuild 脚本可以为您的 SQL Server 数据库执行有用的构建/测试任务。如果你想做一些更自定义的事情,你可以结合使用你的版本控制系统命令行和 SQL 比较命令行。
【讨论】: