SQL试图执行包含在IF块中的语句,即使条件不满足

SQL试图执行包含在IF块中的语句,即使条件不满足,sql,Sql,我们升级了一个SQL数据库,并且在升级的版本中有新的列添加到表中 比如说, Table1有列Column1、Column2 在升级的数据库版本中,会添加一个额外的列 Table1现在有列Column1、Column2、Column3 我试图创建一个脚本,可以在两个版本中工作。此脚本如下所示: DECLARE @DBVersion varchar(25) select @DBVersion = (select DBVersion from DBVersions) IF @DBVersion =

我们升级了一个SQL数据库,并且在升级的版本中有新的列添加到表中

比如说,

Table1
有列
Column1、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
当我在较旧的数据库版本中运行此脚本时,会出现一个错误

无效的列名“Column3”

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

假设您使用的是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 );

不确定您使用的是哪种RDBMS,但这会有所帮助。还有,你确定你做的等式正确吗?也就是说,一些语言使用
==
进行比较。当然,因为我不知道你的RDBMS或语言,我也不知道。没有SQL数据库——SQL只是结构化查询语言——许多数据库系统都使用这种语言——SQL不是数据库产品。。。我们真的需要知道您使用的是什么数据库系统(以及哪个版本)……这些语句没有执行。引擎试图解析脚本中的名称,但失败,因此出现错误。(名称解析发生在脚本执行之前。)要解决它,请使用@Thomas的建议。