小编典典

源代码控制和存储过程

sql

我一直想知道如何将所有存储过程放在源代码管理下的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

阅读 162

收藏
2021-05-05

共1个答案

小编典典

就像其他人所说的那样,首先将每个存储的proc存储在一个单独的文本文件中,该文件受源代码控制。写一个脚本来删除所有存储过程,然后从文本文件中重新创建它们(同时记录/报告任何错误)-该脚本应该易于运行。然后,每次您从源代码管理进行更新时,都将重新运行脚本。对存储过程的所有编辑都应对文本文件进行,而不是对本地数据库上的“ive”副本进行,否则您在进行更新时将丢失更改。

您很快将需要某种方式来审计数据库架构和创建升级脚本等。

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

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

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

在高端考虑使用Visual Studio Team System Database
Edition,但是它花费很多,那么您可能不得不为来自第三方的Oracle支持付出更多的代价。但是,如果您是Microsoft的合作伙伴(或可以成为其中一个),您可能会以非常便宜的价格得到一些应对。

2021-05-05