源代码控制和存储过程

时间:2009-01-22 11:10:07

标签: 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 

5 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:3)

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

然后简单地将该文件夹放在源代码管理下,就像您对其他源代码一样。

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

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

答案 2 :(得分:3)

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

您很快就会想要审核数据库架构并创建升级脚本等。

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

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

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

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

StackOverflow上的

See also Do you source control your databases?可以解决更大的问题。

答案 3 :(得分:2)

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

答案 4 :(得分:2)

请参阅Josef的解决方案:What is the best way to version control my SQL server stored procedures?

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