【发布时间】:2020-07-30 19:35:03
【问题描述】:
我有一个 SQL 脚本,它在删除列之前作为数据库迁移运行。它第一次运行良好,因为源列存在,但如果您尝试再次运行迁移它会失败,因为现在该列不存在。我将它包装在一个 IF 中,因此该语句仅在该列确实存在时运行,但它仍然需要能够编译该位,即使我知道它不会运行它。
这是一个简化版:
IF COL_LENGTH('TableA', 'SourceColumn') IS NOT NULL
BEGIN
UPDATE TableB
SET DestColumn = TableA.SourceColumn
FROM TableB
JOIN TableA AS ON TableB.AId = TableA.Id
WHERE TableB.DestColumn != TableA.SourceColumn;
END
ALTER TABLE TableA
DROP COLUMN SourceColumn;
【问题讨论】:
-
exec('UPDATE TableB ......WHERE TableB.DestColumn != TableA.SourceColumn;');
标签: sql sql-server