2015-09-15 7 views
13

次の3つのSelectクエリは、テーブルエイリアスと列名の間に余分なスペースを持つWhere句に関係なく、同じ結果を生成します。彼らには同じ実行計画もあります。スペースの存在が構文エラーを投げないのはなぜですか?この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 
+0

私は、彼らは同じクエリであると言うでしょうか、それともクエリが何のタプルもなく実行されたのでしょうか? –

+0

それはなぜ合法的ではありませんか? Pythonでも動作します。 – Kevin

答えて

13

SQLは完全にスペースを区別しませんが、「スペース許容」と言いましょう。たとえば、次のように試してみてください。

SELECT 23AB 

楽しいですか?この機能は、1980年代初頭のSQL仕様のもとでは、この種のものがまだ良好であると考えられていた(FortranCOBOLの動作が類似していたため) IIRCでは廃止されましたが、従来の/互換性の理由から、私たちはまだそれに固執しています。

関連する問題