2012-05-18 87 views
0

我们升级了SQL数据库中执行封闭在一个IF语句块,并不断有新列加入到升级版SQL试图即使条件不满足

例如表,

Table1Column1, Column2列。

在升级后的数据库版本

,一个额外的列添加

Table1现在已经列Column1, Column2, Column3

我想创建一个脚本,可以在两个版本。这个脚本是这样的:

DECLARE @DBVersion varchar(25) 

select @DBVersion = (select DBVersion from DBVersions) 

IF @DBVersion = 'Old' 
    BEGIN 
    INSERT Table1 (Column1, Column2) 
    SELECT Value1, Value2 
    FROM TempTable 
    END 

IF @DBVersion = 'New' 
    BEGIN 
    INSERT Table1 (Column1, Column2, Column3) 
    SELECT Value1, Value2, Value3 
    FROM TempTable 
    END 

当我运行在旧的数据库版本的剧本,我得到一个错误

无效列名“栏3”

我想,这是因为SQL在执行之前编译脚本并且无法找到 有没有一种方法可以解决此问题并开发可在两个数据库版本中运行的脚本?

非常感谢

+0

不确定您正在使用哪种RDBMS,但这会有所帮助。另外,你确定你正在做一个正确的平等吗?也就是说,有些语言使用'=='进行比较。当然,因为我不知道你的RDBMS或语言,所以我不知道。 – Marc

+2

有没有这样的事情作为一个** SQL数据库** --- SQL只是*结构化查询语言* - 许多数据库系统使用的语言 - SQL不是数据库产品...我们真的需要知道什么数据库系统(以及您使用的是哪个版本).... –

+0

该语句未执行。引擎试图解析脚本中的名称并失败,因此出现错误。 (名称解析发生在脚本执行之前。)要解决它,请使用@ Thomas的建议。 –

回答

2

假设你正在使用SQL Server或Sybase,你需要使用动态SQL这一点。

Declare @Sql nvarchar(max); 

If @DBVersion = 'Old' 
    Set @Sql = 'Insert Table1(Column1, Column2) 
         Select Value1, Value2 
         From TempTable'; 
Else If @DBVersion = 'New' 
    Set @Sql = 'Insert Table1(Column1, Column2, Column3) 
         Select Value1, Value2, Value3 
         From TempTable'; 

exec (@Sql);