2009-04-23 40 views
10

Xem cho chính mình:Tại sao không gian tên cột hợp lệ trong SqlServer?

create table #temp ([ ] varchar(1)) 
insert into #temp values ('1') 
select [ ] from #temp 

Điều gì là lý do để cho phép điều này?

+0

Điều đó thật thú vị; 1 để chỉ ra một điều khó khăn như vậy ... –

+2

đây chỉ là một cách để vặn một số nhựa nghèo mà sẽ duy trì một ứng dụng 5 năm kể từ bây giờ! Tôi chỉ có thể thấy họ kéo tóc của họ cố gắng hiểu một số truy vấn động và dữ liệu đến từ đâu. haa, nó giống như TOP GOTO, nhưng bạn đặt "top" ở phía dưới, hoặc khai báo một biến có tên là Five và đặt nó là 5 nhưng thay đổi giá trị một số nơi khác, đây là một cổ điển trong việc tạo ra! –

Trả lời

10

Tôi nghĩ rằng lý do là hơn dọc theo dòng:

Có đáng ngăn chặn chức năng này?

Tôi không biết SQL được mã hóa nội bộ như thế nào nhưng tôi cho rằng sẽ cần nhiều nỗ lực hơn để ngăn chặn điều này sau đó cho phép.

+0

bây giờ điều này là tốt đẹp :) Tôi thích sự biện minh của bạn +1 –

+0

Đủ công bằng. Có lẽ bạn đang đúng về việc phải nỗ lực nhiều hơn để ngăn chặn nó. –

9

Tôi luôn sử dụng nó như một trình giữ chỗ/seperator khi gỡ rối các truy vấn phức tạp. Tôi có thể có một cái gì đó như thế này:

SELECT a.*, ' ' as [ ], b.* 
FROM a 
LEFT JOIN b on ... 

Bằng cách này tôi nhận được một phần trống ở giữa hai bảng để tôi có thể dễ dàng nhận thấy trong các kết quả mà người ta dừng lại và bắt đầu khác.

Sau này khi tôi nhận được kết quả và hiệu suất tôi cần, tôi sẽ thay đổi mệnh đề chọn để chỉ sử dụng các cột mà tôi quan tâm.

Điều đó nói rằng, tôi cho rằng không có lý do gì mà tôi không thể sử dụng cái gì khác cho tên cột.

+1

+1 mẹo nhỏ thú vị cho một sự bực mình của tôi nhờ – JoshBerke

2

Tôi đoán một không gian giống như bất kỳ nhân vật nào khác. Bạn thậm chí có thể tạo một bảng có tên []. (Tôi đã thử nó, và nó làm việc.) Tôi nghĩ rằng chỉ đơn giản là không có hạn chế về điều này.

+0

Một bảng? Yikes. Đã không nghĩ để thử điều đó. –

4

Mọi ký tự hợp lệ có thể được sử dụng ở giữa [] để xác định cột & tên bảng. Cho rằng một cái gì đó như [A Column] là hợp lệ (với không gian), không có lý do để ngăn chặn một không gian duy nhất như một tên cột.

Tuy nhiên, khoảng trắng cuối được xóa.

[ ] and [ ] (1 & 2 spaces)
sẽ được cả hai đối xử như

 
[ ] (1 space). 
+0

Phần "Tuy nhiên ..." có phải là trích dẫn hay chỉ được định dạng là trích dẫn không? Nếu đó là trích dẫn, vui lòng thêm liên kết. – Tomalak

+0

Tôi đã cập nhật câu trả lời, Tuy nhiên không phải là trích dẫn, tôi chỉ làm sai thẻ trước. – Steven

4

Space là một nhân vật có thể chấp nhận, như một số người muốn có khoảng trống trong tên cột của họ. Và nếu nó có thể là một phần của một tên cột thì tại sao không phải là một tên cột của chính nó?

Tại sao họ làm điều đó sẽ vẫn là một bí ẩn đối với tôi, vì nó làm cho việc lập trình trở nên khó khăn hơn nhiều (liên tục bao gồm mọi thứ trong "" hoặc []). Tôi đã thực sự nhìn thấy một tên cột với một dấu hỏi, mà chắc chắn là một cái gì đó tôi sẽ tránh sử dụng trong bất kỳ định danh, nhưng nó có thể, vẫn còn.

+0

Ack! Theo một cách nào đó, điều đó còn tệ hơn nữa. –

2

Tôi đánh giá cao giả định rằng tôi đủ trách nhiệm không tự làm tổn thương bản thân bằng các tính năng nguy hiểm tiềm ẩn. Tôi đã không tìm thấy một lý do chính đáng cho không gian trong tên đối tượng bản thân mình, nhưng nó có vẻ là phổ biến trong một số trường hợp. Đây là một ví dụ cực đoan khi chạy bằng kéo.

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