Việc sử dụng dấu ngoặc vuông [] trong câu lệnh sql là gì?


163

Tôi đã nhận thấy rằng Visual Studio 2008 đang đặt dấu ngoặc vuông xung quanh tên cột theo sql. Các dấu ngoặc cung cấp bất kỳ lợi thế? Khi tôi trao mã T-SQL, tôi chưa bao giờ bận tâm đến chúng.

Thí dụ:

Visual Studio:

SELECT [column1], [column2] etc...

Cách riêng của tôi:

SELECT column1, column2 etc...

Một điều tốt là SQL được mã hóa bằng tay của bạn không bao giờ cần dấu ngoặc, quy ước đặt tên cơ sở dữ liệu của bạn nên loại trừ các tên cần ngoặc.
Christian Oudard

Câu trả lời liên quan thảo luận về cài đặt QUOTED_IDENTIFIER: stackoverflow.com/questions/19657101/
Jared Beck

8
Tôi có thể thêm rằng các dấu ngoặc là một trò chơi của Microsoft. Tiêu chuẩn SQL thực sự sử dụng dấu ngoặc kép ( ") mà Microsoft cũng hỗ trợ. Nếu, Microsoft cảm thấy cần phải phân định mọi thứ, thì nó sẽ là hình thức tốt hơn để sử dụng dấu ngoặc kép tiêu chuẩn thay thế. Nhưng tôi đoán rằng điều đó sẽ khiến việc chuyển sang DBMS khác quá dễ dàng và điều đó sẽ không bao giờ thực hiện được
Manngo

Câu trả lời:


181

Dấu ngoặc là bắt buộc nếu bạn sử dụng từ khóa hoặc ký tự đặc biệt trong tên cột hoặc mã định danh. Bạn có thể đặt tên cho một cột[First Name] (có khoảng trắng) - nhưng sau đó bạn cần sử dụng dấu ngoặc mỗi lần bạn tham chiếu đến cột đó.

Các công cụ mới hơn thêm chúng ở mọi nơi chỉ trong trường hợp hoặc để thống nhất.


3
Đây có phải là mục đích duy nhất của dấu ngoặc vuông?

1
@mehow, có vẻ như vậy, nhưng tôi không có tài liệu tham khảo chỉ rõ như vậy.
Michael Haren


2
sql cũng sử dụng dấu ngoặc vuông trong toán tử like của một truy vấn chọn để giới hạn kết quả bằng các biểu thức thông thường. codeproject.com/Articles/33941/Query-LIKE-Operator
Jens Frandsen

2
Bạn cũng có thể xác định một tên cột được gọi selectnhưng select select from mytablesẽ đưa ra một lỗi để select [select] from mytablelàm cho nó trở thành một truy vấn hợp lệ. Bất cứ từ nào trở nên đầy màu sắc trong phòng quản lý SQL của bạn, nên được bao quanh bởi dấu ngoặc nếu bạn muốn sử dụng chúng làm tên cột / bảng / sp / v.v. Trong MySQL có một dấu ngoặc đơn `` `` sẽ tương đương với cái này.
Barry Guvenkaya

59

Chúng rất tiện dụng nếu các cột của bạn có cùng tên với từ khóa SQL hoặc có khoảng trắng trong đó.

Thí dụ:

create table test ( id int, user varchar(20) )

Ôi không! Cú pháp không chính xác gần từ khóa 'người dùng'. Nhưng điều này:

create table test ( id int, [user] varchar(20) )

Hoạt động tốt.


@Blordbeard đây có phải là một cái gì đó cụ thể cho Microsoft SQL Server hay các dấu ngoặc vuông cũng hoạt động tương tự đối với Oracle, myQuery, PostgreQuery, v.v.?
dùng3700562

4
Chân đế không phải là SQL chuẩn, không chắc chắn tất cả các ký tự mà tất cả các công cụ DB sử dụng. Ví dụ: MySQL sử dụng backticks: stackoverflow.com/questions/2889871/
Kẻ

12

Chúng rất hữu ích nếu bạn (vì một số lý do) sử dụng tên cột với các ký tự nhất định chẳng hạn.

Select First Name From People

sẽ không hoạt động, nhưng đặt dấu ngoặc vuông quanh tên cột sẽ hoạt động

Select [First Name] From People

Nói tóm lại, đó là một cách tuyên bố rõ ràng một tên đối tượng; cột, bảng, cơ sở dữ liệu, người dùng hoặc máy chủ.


6

Tên cột có thể chứa các ký tự và các từ dành riêng sẽ gây nhầm lẫn cho công cụ thực thi truy vấn, do đó, việc đặt dấu ngoặc quanh chúng mọi lúc sẽ ngăn điều này xảy ra. Dễ dàng hơn là kiểm tra một vấn đề và sau đó xử lý nó, tôi đoán vậy.


5

Dấu ngoặc có thể được sử dụng khi tên cột là các từ dành riêng.

Nếu bạn đang lập trình tạo câu lệnh SQL từ một tập hợp các tên cột mà bạn không kiểm soát, thì bạn có thể tránh các vấn đề bằng cách luôn luôn sử dụng dấu ngoặc.


5

Bất kể tuân theo quy ước đặt tên nào mà tránh sử dụng các từ dành riêng, Microsoft sẽ thêm các từ dành riêng mới. Sử dụng dấu ngoặc cho phép mã của bạn được nâng cấp lên phiên bản SQL Server mới mà không cần chỉnh sửa các từ mới được bảo lưu của Microsoft ra khỏi mã máy khách của bạn. Chỉnh sửa đó có thể là một mối quan tâm đáng kể. Nó có thể khiến dự án của bạn bị nghỉ hưu sớm ....

Chân đế cũng có thể hữu ích khi bạn muốn Thay thế Tất cả trong một tập lệnh. Nếu lô của bạn chứa biến có tên @String và cột có tên [Chuỗi], bạn có thể đổi tên cột thành [NewString], mà không đổi tên @String thành @NewString.


5

Trong thời kỳ đen tối của SQL vào những năm 1990, đó là một thực tế tốt khi các nhà thiết kế SQL đã cố gắng thêm từng từ trong từ điển làm từ khóa cho vô số tính năng mới và họ gọi đó là bản nháp SQL3.

Vì vậy, nó giữ khả năng tương thích về phía trước.

Và tôi thấy rằng nó có một tác dụng phụ tốt đẹp khác, nó giúp ích rất nhiều khi bạn sử dụng grep trong đánh giá mã và tái cấu trúc.


4

Ngoài ra, một số cơ sở dữ liệu Sharepoint chứa dấu gạch nối trong tên của chúng. Sử dụng dấu ngoặc vuông trong Báo cáo SQL cho phép các tên được phân tích cú pháp chính xác.


3

Tôi tin rằng nó bổ sung chúng ở đó để thống nhất ... chúng chỉ được yêu cầu khi bạn có một khoảng trắng hoặc ký tự đặc biệt trong tên cột, nhưng sẽ tốt hơn nếu chỉ bao gồm chúng mọi lúc khi IDE tạo SQL.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.