如何针对同一个数据库运行我的应用程序的多个版本?

时间:2012-01-19 16:49:39

标签: sql sql-server sql-server-2005 sql-server-2008-r2

Backround :我的生产环境中运行了多个版本的应用程序。根据使用的用户帐户,用户可以访问不同版本的软件。

环境:目前SQL Server 2005,即将迁移到SQL Server 2008,ASP.Net

问题:每个版本的软件可能会也可能不会使用与数据库中的数据交互的不同版本的存储过程。当前更改版本时,无论谁更改版本都会创建新副本并在末尾附加增量版本号。在这一点上,我们有一些存储过程的许多版本,只有一个版本的其他版本,没有人确定哪个版本的应用程序指向哪个版本的存储过程 - 这是一团糟。

我正在寻找一种解决方案,它可以将应用程序的任何给定版本的存储过程整齐地打包,以用作新版本的基础。这意味着应用程序的新版本可以指向新的proc集,可以根据最终用户的内容重写或修改,而不会影响当前可用于生产的其他版本的应用程序。

我最初考虑过模式,但问题的一部分是procs与其他procs和用户定义的函数紧密耦合,所以当复制到另一个模式时,我们新来映射并替换所有这些链接不太理想。

这似乎是一个应该已经解决的问题,但我不知道我在寻找什么是可行的解决方案。

有没有人有任何想法?

2 个答案:

答案 0 :(得分:1)

鉴于您描述的混乱,如果您必须坚持存储过程,我倾向于只有每个存储过程的一个副本,但是所有存储过程都将versionNumber作为最终参数。然后,每个存储过程都有一个名称,并且任何特定于版本的代码都存在于与其相关的存储过程的上下文中。没有特定于版本的代码的存储过程只会忽略该versionNumber paremter(但仍然在其签名中)。

我目前的情况中遇到的一个大问题是,如果存储过程有4个几乎相同的版本,并且有人修复了其中一个版本中的错误,那么很容易忘记在所有其他版本。我描述的解决方案至少可以减少重复代码的数量,并减少错误修复的可能性,只修复一个版本的存储过程。

在这种情况下,我也强烈要求将特定于应用程序版本的逻辑从数据库中导出到代码库中,并在数据库中保留数据特定但与应用程序无关的逻辑。

答案 1 :(得分:-2)

假设版本之间没有向后不兼容的架构和数据更改,我会将应用程序逻辑的所有移动到应用程序代码中。完成后,您可以使用丰富的现有版本控制技术来部署所有指向同一数据库的应用程序的多个版本。

在许多情况下,尝试版本存储过程是徒劳无功的,因为根本不需要访问大多数 RDBMSystems中的代码。一般来说,存储过程被认为是一个潜在的好主意,而不仅仅是没有成功。