【问题标题】:Source Control and stored procedures [duplicate]源代码管理和存储过程 [重复]
【发布时间】:2009-01-22 11:10:06
【问题描述】:

我一直想知道如何将 SQL 2000 上的所有存储过程置于源代码控制之下。
我们对所有正常的源代码都使用 Subversion,所以如果有使用 Subversion 的问题的解决方案,那就太好了。

你有什么想法吗?

2009 年 2 月 16 日更新:这是我用来导出所有存储过程的 vbs 脚本:

Set con = CreateObject("ADODB.Connection")
con.ConnectionString = "*** Database connection string here ***"
con.Open 
Set rs = CreateObject("ADODB.RecordSet")
rs.ActiveConnection = con

strSQL = "SELECT ROUTINE_NAME, ROUTINE_DEFINITION " & _
"FROM INFORMATION_SCHEMA.routines " & _
"WHERE ROUTINE_NAME NOT LIKE 'dt_%' " & _
"ORDER BY 1"

Set fso = CreateObject("Scripting.FileSystemObject")
rs.Open strSQL 
While Not rs.Eof 
    filename = rs("ROUTINE_NAME") & ".sql"
    routineSQL = rs("ROUTINE_DEFINITION")
    Set tf = fso.CreateTextFile(filename, True)
    tf.Write routineSQL
    tf.Close
    set tf = Nothing 
    rs.MoveNext
Wend
Set fso = Nothing 
rs.Close 
Set rs = Nothing 

【问题讨论】:

    标签: sql sql-server version-control stored-procedures


    【解决方案1】:

    通常您在源代码管理中跟踪对 SQL 脚本的更改。 例如,您有一个签入数据库的基本模式。 然后,您不断添加新的 SQL 文件以更改您的架构。这样,您就可以部署到精确的版本以进行测试。然后,您可以使用构建自动化来自动测试您的一些脚本,方法是针对包含实际数据的测试数据库执行它们。

    有很多数据库差异工具可以帮助您找出版本之间的变化。

    【讨论】:

      【解决方案2】:

      正如其他人所说,从每个存储在源代码控制下的单独文本文件中的过程开始。编写一个脚本,删除所有存储过程,然后从文本文件中重新创建它们(同时记录/报告任何错误)——这个脚本应该很容易运行。然后每次从源代码管理更新时重新运行脚本。对存储过程的所有编辑都应该对文本文件进行,而不是本地数据库上的“实时”副本,否则在进行更新时会丢失更改。

      您很快就会想以某种方式审核您的数据库架构并创建升级脚本等。

      如果您只使用 SQL 服务器,请考虑 SQL CompareReg-Gate。我认为它会将文本文件中存储的过程(和其他 sql)与数据库中的内容进行比较并同步两者。所以让你使用SqlServer中的编辑工具来编辑实时存储过程。

      (截至2009年底,Red-Gate即将发货Sql Compare for Oracle

      有人告诉我 ApexSQL 的 Diff 工具是替代 Sql Compare 的另一种选择,ApexSQL 的 Edit 声称提供源代码控制集成。

      在高端考虑 Visual Studio Team System 数据库版,但是它的成本很高,那么您可能需要支付更多的费用才能获得来自第三方的 Oracle 支持。但是,如果您是 Microsoft 合作伙伴(或可以成为其中之一),您可能会非常便宜地获得一些应对。

      See also Do you source control your databases? 在 StackOverflow 上为更大的问题提供了一组很好的答案。

      【讨论】:

        【解决方案3】:

        将所有存储过程编写到一个文件夹中。每个存储过程一个文件。

        然后只需将包含文件的文件夹置于源代码控制之下,就像您对其他源代码所做的那样。

        如果有批处理文件或类似文件将这些存储过程附加在一起也很有帮助,这将是您的“将数据库升级到最新版本”脚本。

        有很多方法可以管理数据库本身的存储过程,但我发现这是最简单的方法。

        【讨论】:

          【解决方案4】:

          除了 Red Gate 的 SQL 比较之外,还可以考虑使用 ApexSQL 的 Diff 工具来检查数据库之间的结构差异。您可能还需要考虑集成源代码控制的管理工具。 ApexSQL 的Edit 提供源代码控制集成。

          【讨论】:

            【解决方案5】:

            在这里查看 Josef 的解决方案:What is the best way to version control my SQL server stored procedures?

            他有一个用于自动创建脚本文件的工具,然后可以将其签入到 SVN(或任何其他存储库,真的)。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2013-04-06
              • 1970-01-01
              • 2013-04-07
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-11-21
              • 2012-04-27
              相关资源
              最近更新 更多