我有一个'参考'SQL Server 2005数据库,用作我们的全球标准。我们都设置了保持通用表模式和数据正确同步,但还没有一个很好的解决方案,如视图,存储过程和用户定义的函数。
我知道像Redgate's SQL Compare这样的产品,但我们现在并不想依赖(任何进一步的)第三方工具。
有没有办法确保参考数据库上的给定存储过程或视图(例如)在目标数据库上是最新的?这可以编写脚本吗?
编辑以澄清:当我说'脚本'时,我的意思是运行一个脚本,推送对目标服务器的任何更改。多个服务器上没有多次运行相同的CREATE / ALTER脚本。
非常感谢任何有关如何处理此问题的建议/经验。
答案 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数据库对象的脚本。您可以使用它来比较在两台服务器上生成的脚本。自开源以来,如果需要,请进行调整。
铁木尔