sql - 如果存在语句不起作用

标签 sql sql-server-2012

我正在 Sql server 2012 上执行以下语句。但即使列不存在,它仍然会执行

IF  EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Table1' AND COLUMN_NAME = 'Age')
begin
  Print 'in'
  Update Table1 set Age = Null

End

我也在下面尝试过

if exists(select * from sys.columns 
      where Name = 'Age' and Object_ID = Object_ID('Table1'))

执行这两个语句都会出现错误无效的列名 Age

不明白为什么它会进入 Begin block 。

最佳答案

exists 语句正在运行。问题在于更新。您的代码在 if 运行之前被编译。所以,错误发生在编译阶段。

您可以使用动态 SQL 来修复此问题:

IF EXISTS (SELECT *
           FROM INFORMATION_SCHEMA.COLUMNS
           WHERE TABLE_NAME = 'Table1' AND COLUMN_NAME = 'Age')
begin
  Print 'in'
  exec sp_executesql N'Update Table1 set Age = Null';
End;

关于sql - 如果存在语句不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28645091/

相关文章:

sql - 是否使用 TinyInt 或 Bit 在 SQL Server 中会有所不同吗?大小和查询性能

sql - 如何获取两个日期时间之间的小时和分钟差异

sql - 从 TimescaleDB 获取 1 年的结果

mysql - SQL - 选择不同的行并将它们与另一个表连接以获取数据

MySQL - 如何一点一点地执行事务,而不是一次执行(如循环)

sql-server - 如何使用 LTRIM/RTRIM 搜索和替换前导/尾随空格?

sql-server - 打开或创建数据库图表后 SQL Server Management Studio 崩溃

c# - 回滚 C# 中的临时数据库更改

SQL - 查询多维数据集

mysql - SQL 查询 3 个表