【问题标题】:"IS" not recognized in SQL Server in column expression?列表达式中的 SQL Server 无法识别“IS”?
【发布时间】:2021-05-21 17:19:33
【问题描述】:

我的观点的第一行(查询?),基本上是在尝试这样做:

SELECT TOP (100) PERCENT dbo.TableName.Field1
, dbo.TableName.Field2
, IIF(dbo.TableName.Field3 IS NOT NULL, 1, 0) AS SomeAlias

但由于某种原因,它不喜欢“IS”关键字并给我它无法识别的错误,即使我在 WHERE 子句中放置了一个带有“IS NOT NULL”的随机字段,它仍然有效美好的。我一直在MS Access里做这种事情,是不是不允许用表达式创建列?

【问题讨论】:

  • Case statement 或 ISNULL 可能会完成您需要给您挖掘的内容。
  • 您使用的是哪个版本的 SQL Server? IIF 是在 SQL Server 2012 中引入的。
  • “SQL Server Management Studio”,我不知道如何检查版本本身
  • 忘记你曾经了解过“TOP (100) PERCENT” - 它没有任何用处!一个视图,就像一张桌子,没有内在的顺序。需要在结果集中排序?那么生成它的查询必须有一个 ORDER BY 子句。
  • 当我创建一个新视图时,即使我尝试删除它,它也会自动插入前 100% 的内容,所以我认为这是强制性的

标签: sql sql-server null


【解决方案1】:

IIF 中的条件应该不是问题。

你可以在这里查看 dbfiddle here 它工作正常。

但您也可以使用case

...
, case when dbo.TableName.Field3 IS NOT NULL then 1 else 0 end AS SomeAlias

【讨论】:

    【解决方案2】:

    您可以改为大小写。

    SELECT TOP (100) PERCENT dbo.TableName.Field1
    , dbo.TableName.Field2
    , (case when dbo.TableName.Field3 IS NOT NULL then 1 else  0 end)  AS SomeAlias
    from dbo.TableName
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多