Sql server 在ms sql中编写DB对象脚本的免费实用程序

Sql server 在ms sql中编写DB对象脚本的免费实用程序,sql-server,svn,version-control,Sql Server,Svn,Version Control,我正在尝试实现数据库源代码控制 我需要的工具应该为数据库中的每个对象创建一个单独的文件,最好安排在文件夹中,如 存储过程 功能 意见 桌子 如果能够同时转储某些查询的结果,以便跟踪多个配置表中的数据更改,那就太好了 我想知道是否已经有一个工具可以处理这种东西 -- 只是想澄清一些事情 我已经在使用sql delta来处理更新脚本 我想要DB的脚本,以便与subversion一起使用,这样我就可以跟踪每次提交时更改的对象,而无需研究更新脚本 我正在用SQL分布式管理对象(SQL-DMO)开发一个很

我正在尝试实现数据库源代码控制

我需要的工具应该为数据库中的每个对象创建一个单独的文件,最好安排在文件夹中,如

存储过程 功能 意见 桌子

如果能够同时转储某些查询的结果,以便跟踪多个配置表中的数据更改,那就太好了

我想知道是否已经有一个工具可以处理这种东西

--

只是想澄清一些事情

我已经在使用sql delta来处理更新脚本

我想要DB的脚本,以便与subversion一起使用,这样我就可以跟踪每次提交时更改的对象,而无需研究更新脚本

我正在用SQL分布式管理对象(SQL-DMO)开发一个很好的vb脚本,我将告诉你它是如何运行的

拥有自己的解决方案的好处在于,我还可以包含查询或存储过程执行的输出,以跟踪某些表中的更改、服务器配置、数据库的增长,以及我可以转储到文本文件中的任何内容…

您可以尝试,这并不是您想要的,但仍然可以帮助您处理数据库更改管理。它可以对您的数据库模式进行反向工程(当然是其中的一个子集),然后在一个特殊的独立于平台的DSL中编写所谓的“迁移”:

version 20090331140131:
    oxite_FileResource:
        FileResourceID type => PK, primary-key => true
        SiteID type => Guid, nullable => false
        FileResourceName type => LongName
        CreatorUserID references => oxite_User
        Data type => Binary
        ContentType type => AnsiString, length => 25, nullable => false
        Path type => String, length => 1000, nullable => false
        State type => Byte, nullable => false
        CreatedDate type => DateTime, nullable => false
        ModifiedDate type => DateTime, nullable => false 

    oxite_UserFileResourceRelationship:
        UserID references => oxite_User
        FileResourceID references => oxite_FileResource:
            add index unique => true

        index "" columns => [UserID, FileResourceID], unique => true, clustered => true

如果我理解正确,您需要两件事:首先,您需要从数据库元数据(表、视图、存储过程等)生成脚本,一旦完成,您需要使用某种一致的脚本版本控制方法

如果数据库中已经有metadat和数据,我看不出有什么可以阻止您使用SQL Management Studio(或SQL Enterprise Manager)从数据库对象生成脚本:请参阅。这适用于SQL Server 2000、2005等。请记住,您可以自定义脚本生成设置,例如,您可以为每个对象使用单独的脚本,而不是一个庞大的脚本。您可能需要编写一些脚本来用数据填充表(我不确定向导是否支持数据提取)


一旦获得脚本,您可能必须在特定文件夹之间手动分发它们,完成后,您应该准备好在源代码管理中检查它们。从这一点开始,您需要找出后续数据库安装、升级和修复的方法。这是一项相当复杂的任务,涉及的时间比简单的回答要长。如果您对可能的选项感兴趣,请查看我的帖子,其中提到了许多方法,并引用了几篇有关数据库版本控制的文章(很抱歉自我宣传,但我不想重复相同的信息)。

该领域的大多数工具都不是免费的,但有一个开源项目,这可能满足您生成脚本的需要

这并不能解决如何按正确顺序将脚本应用到数据库的问题-如果您不想付款,您可能需要自己即兴创作。

我正是为了这个目的而使用的。我唯一需要更改的是删除生成文件中的脚本日期。否则,文件在Subversion中总是标记为已更改

这是我用的那批。svnclient是codeplex提供的工具,用于将文件夹中的所有文件检入subversion:

svn签出”http://svn/myproject“D:\Projekte\db\u svn\myproject

ScriptDB“D:\temp\ScriptDB”myserver mydb mylogin mypwd

del“D:\Projekte\db\u svn\myproject\Schema Objects\\\*.sql”/q/s

xcopy“D:\temp\scriptdb\myserver\mydb\Schema Objects\\*.sql”D:\Projekte\db\u svn\myproject\Schema Objects”/e/y/i


svnclient“D:\Projekte\db\u svn\myproject”-m“commit durch svncompletesync”

运行ScriptDB时,创建的文件不包含脚本编写日期。但我还有一个大问题(我也在尝试将ScriptDB与Subversion一起使用):当我删除数据库中的一个对象并再次运行ScriptDB时,它不会删除该对象已经生成的脚本文件。你是怎么解决的?在再次运行ScriptDB之前,我尝试删除创建的文件,但下一次提交失败,因为.svn文件夹也消失了…有时你看不到明显的:del c:\folder*.sql只删除sql文件,而保留.svn文件夹不变。这正是我要找的(但没有看到)。非常感谢。在尚未发布的下一版本的scriptdb中有一个批处理文件,该文件应该能够从源文件为您重新创建数据库。您可以从版本控制中获取它。我没有试过,但它看起来做得对。