我正在使用 SQL Server 2008 R2。我为一些迁移创建了一些 SQL 语句:
IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='TableA' AND COLUMN_NAME='Status')
BEGIN
UPDATE TableA
SET Status = 'Active'
WHERE Status IS NULL
END
现在,我从数据库表 TableA
中删除了列 Status
。
再次当我执行上面的 block 时,虽然我已经检查了该列是否存在,但只有那时它才应该执行 UPDATE
语句,它给我错误
Invalid column name 'Status'
如何摆脱这个错误?
谢谢
最佳答案
您需要将代码放在单独的范围/批处理中运行:
IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME='TableA' AND COLUMN_NAME='Status')
BEGIN
EXEC('UPDATE TableA SET Status=''Active'' WHERE Status IS NULL')
END
您当前遇到的问题是系统希望在执行代码的任何部分之前编译您的代码批。它无法编译 UPDATE
语句,因为缺少一列,所以它甚至没有机会开始执行代码并考虑是否EXISTS
谓词返回 true 或 false。
关于sql-server-2008 - 如何忽略 SQL Server 2008 R2 中的 "Invalid column name"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24114133/