Tìm kiếm sự hiểu biết về QUOTED_IDENTIFIER
tôi sẽ đăng một số hiểu biết ở đây.
Phiên bản ngắn
ANSI yêu cầu rằng dấu ngoặc kép được sử dụng xung quanh số nhận dạng (không xung quanh chuỗi). SQL Server hỗ trợ cả hai:
Máy chủ SQL ban đầu:
-
SELECT "Hello, world!"
- dấu ngoặc kép -
SELECT 'Hello, world!'
--apostrophe -
CREATE TABLE [The world's most awful table name] ([Hello, world!] int)
-
SELECT [Hello, world!] FROM [The world's most awful table name]
ANSI (tức là SET QUOTED_IDENTIFIER ON
):
-
SELECT "Hello, world!"
- dấu ngoặc kép không còn hợp lệ trong ANSI xung quanh chuỗi -
SELECT 'Hello, world!'
--apostrophe -
CREATE TABLE "The world's most awful table name" ("Hello, world!" int)
-
SELECT "Hello, world!" FROM "The world's most awful table name"
Phiên bản Dài
Ban đầu, SQL Server cho phép bạn sử dụng dấu ngoặc kép ("..."
) và dấu nháy đơn ('...'
) xung quanh các chuỗi có thể thay thế cho nhau (giống như Javascript):
-
SELECT "Hello, world!"
- dấu ngoặc kép -
SELECT 'Hello, world!'
--apostrophe
Và nếu bạn muốn một bảng tên, chế độ xem, thủ tục, cột, v.v. có nội dung nào đó có thể vi phạm tất cả các quy tắc đặt tên đối tượng, bạn có thể đặt nó trong dấu ngoặc vuông ([
, ]
):
CREATE TABLE [The world's most awful table name] ([Hello, world!] int)
SELECT [Hello, world!] FROM [The world's most awful table name]
Và tất cả đều hoạt động và có ý nghĩa.
Sau đó là ANSI
Sau đó ANSI ra đời và có những ý tưởng khác:
- nếu bạn có một cái tên thú vị, hãy đặt nó trong dấu ngoặc kép (
"..."
) - sử dụng dấu nháy đơn (
'...'
) cho chuỗi - và chúng tôi thậm chí không quan tâm đến dấu ngoặc vuông của bạn
Có nghĩa là nếu bạn muốn "trích dẫn" một cột hoặc tên bảng thú vị mà bạn phải sử dụng dấu ngoặc kép:
SELECT "Hello, world!" FROM "The world's most awful table name"
Nếu bạn biết SQL Server, bạn biết rằng dấu ngoặc kép đã được sử dụng để đại diện cho các chuỗi. Nếu bạn cố gắng thực thi ANSI-SQL đó một cách mù quáng như thể nó là T-SQL :nó vô nghĩa và SQL Server đã nói với bạn như vậy:
Msg 102, Level 15, State 1, Line 8
Incorrect syntax near 'The world's most awful table name'.
Nó tương đương với đạo đức của việc cố gắng thực hiện:
SELECT 'Hello, world!' FROM 'The world''s most awful table name'
Điều này giống như thực thi:
SELECT 'string' FROM 'string'
Bạn phải chọn tham gia hành vi ANSI mới
Vì vậy, Microsoft đã thêm một tính năng để cho phép bạn chọn tham gia phiên bản ANSI của SQL.
Bản gốc (hoặc QUOTED_IDENTIFIER
tắt) :
SELECT "Hello, world!" --valid
SELECT 'Hello, world!' --valid
BẬT QUOTED_IDENTIFIER :
SELECT "Hello, world!" --INVALID
SELECT 'Hello, world!' --valid
SQL Server vẫn cho phép bạn sử dụng [square brackets]
, thay vì buộc bạn sử dụng "quotation marks"
. Nhưng với QUOTED_IDENTIFIER ON, bạn không thể sử dụng "double quote quotation mark around strings"
, bạn chỉ được sử dụng 'the single quote apostrophe'
.