源代码控制和存储过程

All*_*sen 5 sql sql-server version-control stored-procedures

我一直在想如何将所有存储过程放在源代码控制下的SQL 2000上.
我们正在使用Subversion来处理所有正常的源代码,所以如果使用Subversion解决问题会很好.

你有什么想法?

更新16-02-2009:这是我用于导出所有存储过程的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 
Run Code Online (Sandbox Code Playgroud)

Ian*_*ose 3

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

\n\n

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

\n\n

如果您只使用 SQL Server,那么请考虑Reg-Gate中的SQL Compare。我认为它会将文本文件中的存储过程(和其他 SQL)与数据库中的存储过程进行比较,并同步两者。因此让您使用SqlServer中的编辑工具来编辑实时存储过程。

\n\n

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

\n\n

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

\n\n

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

\n\n

另请参阅您对数据库进行源代码控制吗?在 StackOverflow 上找到关于更大问题的一组很好的答案。

\n