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 に答える