如何在 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 数据库之间同步视图和存储过程?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Express 在 SQL Server 2008 R2 和 MongoDB 之间进行实时同步
SQL Server - 使用 Merge 语句实现表数据之间的对比同步