2015-09-15 21 views
13

Ba truy vấn chọn dưới đây, bất kể mệnh đề Where có thêm khoảng trống giữa bí danh bảng và tên cột, tạo ra kết quả tương tự. Tất cả đều có cùng một kế hoạch thực hiện. Tại sao sự hiện diện của một không gian không ném một lỗi cú pháp?Tại sao không gian trong mệnh đề Where này không gây ra lỗi cú pháp?

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

tôi sẽ nói, chúng là cùng một truy vấn, Hoặc bạn có nghĩa là tại sao truy vấn được thực thi mà không có bất kỳ bộ dữ liệu nào trong đó? –

+0

Tại sao điều đó không hợp pháp? Nó cũng hoạt động trong Python. – Kevin

Trả lời

13

Vì SQL, trong khi không hoàn toàn không phân biệt không gian, là, giả sử, "không gian chịu được". Ví dụ: hãy thử cái này:

SELECT 23AB 

Vui vẻ, huh? Tính năng này xuất phát từ các đặc điểm kỹ thuật SQL ban đầu vào đầu những năm 1980 khi loại điều này vẫn được một số người cho là tốt (vì FortranCOBOL có các hành vi tương tự). IIRC, nó không còn được dùng nữa, nhưng vì lý do tương lai/tương thích, chúng tôi vẫn bị mắc kẹt với nó.

Các vấn đề liên quan