如何在 SQL Server 数据库之间同步视图和存储过程?

Posted

技术标签:

【中文标题】如何在 SQL Server 数据库之间同步视图和存储过程?【英文标题】:How can I synchronize views and stored procedures between SQL Server databases? 【发布时间】:2008-12-02 23:24:55 【问题描述】:

我有一个“参考”SQL Server 2005 数据库,用作我们的全球标准。我们都准备好保持通用表架构和数据正确同步,但是对于视图、存储过程和用户​​定义的函数等其他对象还没有一个好的解决方案。

我知道像 Redgate's SQL Compare 这样的产品,但我们现在真的不想依赖(任何其他)第 3 方工具。

有没有办法确保参考数据库上的给定存储过程或视图(例如)在目标数据库上是最新的?这可以写脚本吗?

为澄清而编辑:当我说“脚本化”时,我的意思是运行一个将任何更改推送到目标服务器的脚本。不在多个服务器上多次运行相同的 CREATE/ALTER 脚本。

任何有关如何解决此问题的建议/经验将不胜感激。

【问题讨论】:

【参考方案1】:

1) 将所有视图、触发器、函数、存储过程、表模式等保存在源代码管理中,并将其用作主控。

2) 做不到这一点,使用您的参考数据库作为主数据库并编写视图和存储过程等脚本:右键单击数据库、任务->生成脚本并选择您的对象。

3) 您甚至可以在参考数据库和目标数据库之间使用事务复制。

我坚信最好的方法是将所有内容编写成脚本并放入源代码管理中。

【讨论】:

如果您在生成脚本时使用“脚本排序”,它将按字母顺序对它们进行排序,以便于比较。 我们已经在源代码控制中拥有了 SP 等。我希望的是直接从一个数据库复制到另一个数据库。您能否详细说明“事务复制”? 这意味着您将存储过程复制为“仅过程模式”(请参阅​​ sp_addarticle 或msdn.microsoft.com/en-us/library/ms147873.aspx)。【参考方案2】:

您可以使用系统表来执行此操作。

例如,

select * from sys.syscomments

“文本”列将为您提供存储过程的所有代码(以及其他数据)。

所有系统表和过程都值得一看。事实上,我怀疑这就是 RedGate 的软件和其他工具在幕后所做的。

我自己刚刚开始对此进行试验,因此我无法具体说明所有问题以及您需要查询哪些其他系统表,但这应该可以帮助您入门。

另见:

Query to list SQL Server stored procedures along with lines of code for each procedure

这与您的问题略有不同,但相关。

【讨论】:

这并不能直接回答这个问题,但它确实指向我获取我需要的信息。谢谢! :)【参考方案3】:

我使用(并且喜欢)RedGate 工具,但是当 Microsoft 发布 Visual Studio 2010 时,他们决定允许 MSDN 订阅者获得 Visual Studio 2008 Team System 也获得 Visual Studio 2008 Database Edition(它有一个架构比较工具) .

因此,如果您或您的组织订阅了 MSDN,您可能需要考虑通过您的团队系统下载并安装 Database Edition 以立即获取所有功能。

更多详情http://msdn.microsoft.com/en-us/vsts2008/products/cc990295.aspx

【讨论】:

【参考方案4】:

看看 Codeplex 上的 ScriptDB (http://www.codeplex.com/ScriptDB)

它是一个控制台 C# 应用程序,它使用 SMO 创建 SQL 数据库对象的脚本。您可以使用它来比较在两台服务器上生成的脚本。由于它是开源的,如果需要,请自行调整。

帖木儿

【讨论】:

以上是关于如何在 SQL Server 数据库之间同步视图和存储过程?的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 在两个数据库之间同步数据

access和sql server实时同步

使用 Express 在 SQL Server 2008 R2 和 MongoDB 之间进行实时同步

SQL Server - 使用 Merge 语句实现表数据之间的对比同步

转载SQL Server - 使用 Merge 语句实现表数据之间的对比同步

在两者之间通过 WCF 服务同步 2 个本地 SQL Server 数据库