0
データの移行中です。私は2つのテーブルには、私は何をする必要があることはmaster_table
からId
とdetail_table.master_table_id
を記入し、old_master_table_id
とOldId
を削除している入れ子になったsqlの実行を制限する方法
master_table
------------
OldId char -- Old Primary key
Id int -- New Primary Key
....
detail_table
------------
Id int
old_master_table_id char -- old FK from master_table
master_table_id int -- new FK from master_table
....
以下のように外部キーでリンクされています。私は、次のUpdateコマンドを使用して、列を削除しています。このコマンドは初めて正常に動作します。しかし、私はコマンドの実行を制限する必要があるので、古い列がある場合にのみ実行する必要があります。
IF NOT Exists(SELECT * FROM sys.columns WHERE
Object_ID = Object_ID('detail_table') AND Name = 'old_master_table_id') BEGIN
UPDATE detail_table SET
master_table_id = (SELECT Id FROM master_table
WHERE
detail_table.old_master_table_id=master_table.OldId);
ALTER TABLE detail_table DROP COLUMN old_master_table_id;
END
私があれば持っており、それが正常に動作しますが、コマンドの上に私にエラーを与える無効な列名は「old_master_table_id」。
上記のエラーを回避するにはどうすればよいですか?
問題は、SQLは、 'if'を実行する前に、現在のデータベーススキーマに基づいてバッチ全体をコンパイルすることです。 –