【发布时间】:2010-10-09 01:00:24
【问题描述】:
我负责一个数据库。 它有大约 126 个存储过程,大约 20 个视图,一些 UDF。有一些表格可以保存我们各种应用程序的固定配置数据。
我一直在使用一个大文本文件,其中包含 IF EXIST ...DELETE GO CREATE PROCEDURE... 用于配置脚本的所有 sproc、udf、视图和所有插入/更新。
随着时间的推移,添加了新的 sproc,或者更改了现有的 sproc。
我在创建这个 BIG 单个文本文件时犯的最大错误(据我所知)是在文本文件的开头使用新/更改的 sproc 的代码。但是,我忘记排除新/更改的存储过程的先前代码。让我们来说明这一点:
假设我的 BIG 脚本(版本 1)包含创建存储过程的脚本
sp 1
sp 2
sp 3
view 1
view 2
数据库的版本表更新为版本 1。
现在 sp 2 有一些变化。所以 BIG 脚本的第 2 版现在是:
sp2 --> (newly added)
sp1
sp2
sp3
view 1
view 2
所以,显然运行 BIG 脚本版本 2 不会更新我的 sp 2。
对于 100 多个存储过程,我有点晚才意识到这一点。
补救措施:
我创建了一个文件夹结构。每个 sproc/view 一个子文件夹。
我已经浏览了最新版本的 BIG 脚本,并将所有脚本的代码放入相应的文件夹中。有些脚本在 BIG 脚本中重复多次。如果创建特定存储过程的代码块不止一个,我会将早期版本放入该存储过程的文件夹中另一个名为“old”的子文件夹中。幸运的是,我一直记录我对所有 sprocs/view 等所做的所有更改——我记下日期、版本号和所做更改的描述,作为 sproc 代码中的注释。当 sproc 有多个代码块时,这有助于我找出 sprocs 的最新版本代码。
我创建了一个 DOS 批处理来连接所有单独的脚本来创建我的 BIG 脚本。我尝试使用 .net 流读取器/写入器,它与编码和“£”符号混淆。所以我暂时还是坚持DOS批处理。
有什么方法可以改进整个过程吗? 目前,我正在以某种方式记录 BIG 脚本的版本控制及其各个 sproc 版本。例如,我喜欢有一些方法来记录
Big Script (version 1) contains
sp 1 version 1
sp 2 version 1
sp 3 version 3
view 1 version 1
view version 1
Big script (version 2) has
sp 1 version 1
sp 2 version 2
sp 3 version 3
view 1 version 1
view 2 version 1
欢迎任何反馈。
【问题讨论】:
-
你为什么继续与大脚本斗争?拥有大脚本能创造什么价值?为什么大脚本如此重要?请用 Big Script 的一些理由更新您的问题。
-
刚开始时,我有一个 BIG 脚本和数据库。该公司将最新的数据库提供给新客户,并将 BIG 脚本提供给现有客户以更新其旧数据库。如果有更好的方法可以帮助我摆脱这个 BIG 脚本,我一定会这样做。
标签: sql version-control stored-procedures project-management