我一直想知道如何将所有存储过程放在源代码控制下的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
答案 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上的答案 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(或任何其他存储库)。