0

我们升级了一个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 在执行之前编译脚本并且无法找到有没有办法解决这个问题并开发一个可以在两个数据库版本中运行的脚本?

4

1 回答 1

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 );
于 2012-05-18T20:22:45.460 回答