【问题标题】:Why does the space in this Where clause not cause a syntax error?为什么此 Where 子句中的空格不会导致语法错误?
【发布时间】:2015-12-11 19:47:13
【问题描述】:

以下三个 Select 查询,无论 Where 子句在表别名和列名之间有一个额外的空格,都会产生相同的结果。它们也都有相同的执行计划。为什么空格的存在不会引发语法错误?

DECLARE @TblX TABLE(
    ColX int
    ,ColY float
    )

-----As it normally should be
SELECT *
FROM @TblX X
WHERE X.ColX = 1

----Even this works
SELECT *
FROM @TblX X
WHERE X .ColX = 1

----And this too
SELECT *
FROM @TblX X
WHERE X. ColX = 1

【问题讨论】:

  • 我会说,它们是同一个查询,或者你的意思是为什么查询在没有任何元组的情况下被执行?
  • 为什么不合法?它也适用于 Python。

标签: sql-server tsql sql-server-2012


【解决方案1】:

因为 SQL 虽然并非完全不区分空间,但可以说是“空间容忍”的。例如,试试这个:

SELECT 23AB

有趣,对吧?这个特性可以追溯到 1980 年代早期的原始 SQL 规范,当时这种东西仍然被一些人认为是好的(因为 FortranCOBOL 有类似的行为)。 IIRC,它现在已被弃用,但出于遗留/兼容性原因,我们仍然坚持使用它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-15
    • 2015-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多