sql-server-2008 - 如何忽略 SQL Server 2008 R2 中的 "Invalid column name"错误

标签 sql-server-2008 sql-server-2008-r2

我正在使用 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/

相关文章:

sql - 如何从 SQL 表中获取从现在开始的 30 天

sql-server-2008 - 格式化时间为 "24-hour Military Time"?

sql-server - SQL Server 存储过程可以以比其调用者更高的权限执行吗?

c# - Entity Framework 6 : Multicolumn unique index featuring navigation property

sql-server-2008 - 跨数据库的用户定义类型

sql-server - 为什么我的全文搜索没有结果?

sql-server-2008-r2 - 重置Microsoft SQL Server 2008 R2中的自动增量

sql - 在SQL Server中将字符串排序为数字

sql - 在SQL中选择100个最低值?

sql - 检查表 1 的某一列的所有单词是否存在于表 2 的其他列中