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

时间:2008-12-02 23:24:55

标签: sql sql-server

我有一个'参考'SQL Server 2005数据库,用作我们的全球标准。我们都设置了保持通用表模式和数据正确同步,但还没有一个很好的解决方案,如视图,存储过程和用户​​定义的函数。

我知道像Redgate's SQL Compare这样的产品,但我们现在并不想依赖(任何进一步的)第三方工具。

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

编辑以澄清:当我说'脚本'时,我的意思是运行一个脚本,推送对目标服务器的任何更改。多个服务器上没有多次运行相同的CREATE / ALTER脚本。

非常感谢任何有关如何处理此问题的建议/经验。

4 个答案:

答案 0 :(得分:6)

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

2)如果不这样做,请使用您的参考DB作为主文件并编写视图和存储过程等脚本:右键单击DB,Tasks-> Generate Scripts并选择您的对象。

3)您甚至可以在Reference和Target DB之间使用事务复制。

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

答案 1 :(得分:3)

我使用(并且喜欢)RedGate工具,但是当微软宣布推出Visual Studio 2010时,他们决定允许获得Visual Studio 2008 Team System的MSDN订阅者也获得Visual Studio 2008数据库版(具有架构比较工具)

因此,如果您或您的组织拥有MSDN订阅,您可能需要考虑通过Team System下载和安装Database Edition以立即获得所有功能。

http://msdn.microsoft.com/en-us/vsts2008/products/cc990295.aspx

的更多详情

答案 2 :(得分:3)

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

例如,

select * from sys.syscomments

“text”列将为您提供商店程序的所有代码(以及其他数据)。

值得查看所有系统表和过程。事实上,我怀疑这是RedGate的软件和其他工具所做的事情。

我刚开始尝试这个,所以我不能真正具体说明你需要查询的所有问题和其他系统表,但这应该让你开始。

另见:

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

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

答案 3 :(得分:3)

在Codeplex上查看ScriptDB(http://www.codeplex.com/ScriptDB

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

铁木尔