为什么这个Where子句中的空格不会导致语法错误?

ano*_*xen 13 t-sql sql-server sql-server-2012

以下三个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
Run Code Online (Sandbox Code Playgroud)

RBa*_*ung 13

因为SQL虽然不是完全空间不敏感的,但是,比方说,"容忍空间".例如,试试这个:

SELECT 23AB
Run Code Online (Sandbox Code Playgroud)

好玩,对吧?这个功能来自于20世纪80年代早期的原始SQL规范,当时这种事情仍被一些人认为是好的(因为FortranCOBOL有类似的行为).IIRC,它现在已被弃用,但出于传统/兼容性原因,我们仍然坚持使用它.