我一直想知道如何将所有存储过程放在源代码管理下的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
就像其他人所说的那样,首先将每个存储的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的合作伙伴(或可以成为其中一个),您可能会以非常便宜的价格得到一些应对。