SQL Server的版本控制


14

我正在开始一个新项目,并使用SVN(带有Tortoise)作为我的版本控制系统。我想知道是否有可能使用同一系统来维护SQL Server数据库。

我想对我的表/函数/视图/ procs / triggers / etc进行版本控制。但不是我的数据,因为无论如何它们都将是测试数据。我不太确定该如何设置。我遇到了一些选择,但我想知道是否缺少任何我,是否有指导或其他帮助我开始使用它的东西。

我已经听说过Red Gate,但我正在寻找免费的东西(或至少非常便宜的东西)。我知道我总是可以自己写点东西,但我并不是真的想花时间在上面。

我遇到的一件事是放在一起称为ScriptDB4Svn的开源软件包。有人使用过吗?好吗?它可以做我需要做的事情吗,设置起来很简单吗?


1
Has anyone used this before? Is it good? Can it do the things I need it to do and is it pretty simple to get setup?您为什么害怕自己尝试一下?只是抓住它并玩耍。
尼斯2012年

@YannisRizos-如果我对此没有得到太多的答复,我绝对会的,我基本上只是想尝试节省一些时间,看看以前是否有人使用过它,或者是否有人立即进行了测试和测试。可以满足我的需求,这样我可以节省一些实验时间。

刚注意到您在这里有多新。程序员SE并不是一个仅仅为了节省时间而问问题的好地方,我们真的希望您自己做类似的事情,即在问之前进行自己的研究。或者,也可以在聊天中提问(但不要期待可靠的答案)。话虽如此,但这并不重要,因为最后一句话不是您的核心问题,它实际上是一个很好的问题(并且已正确标记,对于新用户来说,实在是太难了!)。
yannis 2012年

@YannisRizos-谢谢。我将跳到聊天中,看看是否可以获得有关ScriptDB4Svn的反馈,然后在这里返回以查看核心问题的任何更新。编辑:直到我有20个代表,我才能聊天。哦,我猜要耐心点。

Answers:


2

从技术上讲,您甚至不需要工具,您可以直接编写对象脚本并将其检入源代码管理。如果没有该工具,则还有很多工作要做,但绝对可行。

顺便说一句:我使用了RedGate工具,它非常漂亮,值得花钱。


因此,基本上我会在Management Studio中进行工作,然后将脚本导出到SVN目录,并且基本上每次我在脚本上进行操作(每次导出都替换旧的脚本)?我想那行得通。它将保留能够还原和填充内容的SVN功能,但是,是的,这很麻烦。也许我会看看RedGate的定价,看看对我来说是否值得。

@Scott-手动方式可以起作用,您只需要以不同的方式考虑您的SQL开发。对象的脚本版本是“官方”版本,而SQL中的脚本版本只是对象的编译版本。就像您的源代码一样。
JohnFx 2012年

我决定手动进行操作,并可能使用Mike Nakis提供的链接中的帮助来实现脚本,但是现在,我只需要使用Management Studio中的内置GUI即可在完成后导出数据库创建脚本。工作,然后检查其中的内容,并让SVN以这种方式保持版本。由于我决定手动进行操作,您会得到答案,指出我确实不需要工具来执行此操作:)

1

听起来您的安装主要是Microsoft。您可以查看数据库项目(以前称为DataDude)。他们基本上将T-SQL转换为Visual Studio中的一流语言。您可以:

  • 编译项目-它不仅创建最终脚本,还确保对象名称等存在。
  • 执行静态代码分析-例如,确保通过包含对象的模式(例如,[dbo]在大多数情况下)始终引用对象,以实现30%的性能提升。
  • 通过比较项目的不同版本来创建差异脚本。
  • 从数据库或脚本(逆向工程师)更新项目。
  • 智能感知。
  • 没有图表工具。

它们也很好地在源代码控制下统一了您的代码和数据库代码。如果男人向上和脚本数据库对象(而不是SSMS使用达芬奇工具),你也登陆了使用一个IDE -这是很好的。


0

您可以使用Rails。Rails具有数据库迁移的概念,您可以应用或回滚。以我的经验,这是版本数据库的最佳方法。您确实将这些迁移文件签入了SVN。

在我当前的项目中,我们不是在Ruby中开发应用程序,但是我们仍在使用Rails来管理数据库。我不会以其他方式这样做。


有没有更多的指南对此进行解释,并开始进行类似的设置?

实际上,将Rails与.NET技术一起使用不是一个好主意。
2012年

关于Rails迁移的章节(guides.rubyonrails.org/migrations.html)。这应该足以让您入门,并为您提供所有有关为什么这是个好主意所需的背景知识。@altern-由于您仅使用Rails来操作和版本控制数据库,因此这对.NET技术和任何影响。您可以像不使用rails一样访问和使用数据库。我不介意看到一些关于您所关注问题的参考。IronRuby不是Ruby和Rails的.Net实现吗?
Vinnie 2012年

> IronRuby是否不是Ruby和Rails的.Net实现?IronRuby是Ruby的.NET实现。我不确定Rails是否可以在IronRuby上正常工作。我反对将Rails用于数据库版本控制的一般观点是,Ruby和相关技术(RoR,migratinos)的学习曲线非常陡峭,尤其是对于诸如数据库版本控制这样的简单任务。可以将其用于其他目的,而不仅仅是迁移。否则,只会增加项目的复杂性而没有太大的积极作用。
altern

0

之前已经在stackoverflow上对此进行了讨论:https : //stackoverflow.com/questions/2750278/sql-server-2008-create-database-script-schema-data-with-command-line

此外,此外部文章还提供了一些其他信息,以及以Windows应用程序形式提供的示例代码,以及http://www.sqlteam.com/article/scripting-database-objects-using-smo-updated

由于您想做的是我自己为MS Access做的事情,因此我将告诉您我做了什么,以防万一它给您一些想法:我编写了一个名为Ado2Xml的模块,该模块可以转换任何ADO的模式和数据。 -可访问的数据库到xml,然后返回。它只知道表和视图。没有存储过程,没有触发器,什么都没有。无论如何,在您的情况下,该模块将被您可能会发现可以用MS-SQL进行操作的工具所取代。因此,每次我的应用程序启动时,它都会将数据库的时间戳与保存的xml文件的时间戳进行比较。如果xml文件是最新的,则它将销毁数据库并调用Ado2Xml从xml文件重新创建它。当我的应用程序终止时,它的操作相反:它调用Ado2Xml将数据库导出到xml文件中。其实,出于某种原因,提取数据库架构的ADO对象非常慢,导致导出过程要花费一些时间。因此,为了避免每次都等待我的应用程序终止并且Visual Studio从调试布局切换到编辑布局,在终止应用程序之前,我的应用程序启动了一个外部应用程序来进行导出,以便可以终止立即。


您提供的两个链接可能是我自己进行设置的兴趣,因此我基本上可以自动执行我现在正在执行的手动步骤。谢谢那些!

0

是的,我在先前的项目中使用了类似的工具(内部开发)。它将所有表,视图,存储过程,触发器等脚本化为单独的.sql文件。然后,我们有一个脚本每天晚上运行,以“验证”“开发”数据库中的所有内容都反映在源代码控制中。

因此,正常的工作流程是,您将根据需要更改代码,更改开发数据库中的相应表和存储库,然后运行我们拥有的工具,该工具将刷新所有脚本化的.sql文件。然后,您将立即检查所有内容。

问题是,如果您忘记运行该工具,则由于数据库“正确”,代码将“正常运行”(并且单元测试将通过),但是新的存储过程/表将不是源代码控制。

因此,每天晚上,我们都有一个脚本对源代码进行签出,然后为该工具提供兰特以刷新所有脚本。如果存在任何差异,则意味着有人忘记签入其更改,并生成了电子邮件通知。基本上,这只是确保我们不会忘记保持源代码控制最新的一种方法。

这有点烦人,因为它使处理跨越多天的更改变得很困难,但是总比没有什么要好。


你能详细说明Then, we had a script that ran every night to "validate" that everything in our "development" database was reflected in source control.吗?感谢您的答复。

@斯科特:我已经编辑了答案,以包括更多细节。
迪恩·哈丁
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.