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

时间:2015-09-15 13:56:16

标签: sql-server tsql 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

1 个答案:

答案 0 :(得分:13)

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

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