Mencari pemahaman tentang QUOTED_IDENTIFIER
saya akan memposting beberapa pemahaman di sini.
Versi singkat
ANSI menuntut agar tanda kutip digunakan di sekitar pengidentifikasi (bukan di sekitar string). SQL Server mendukung keduanya:
SQL Server awalnya:
SELECT "Hello, world!"
--tanda kutipSELECT 'Hello, world!'
--apostrofCREATE TABLE [The world's most awful table name] ([Hello, world!] int)
SELECT [Hello, world!] FROM [The world's most awful table name]
ANSI (yaitu SET QUOTED_IDENTIFIER ON
):
SELECT "Hello, world!"
--tanda kutip tidak lagi valid di ANSI di sekitar stringSELECT 'Hello, world!'
--apostrofCREATE TABLE "The world's most awful table name" ("Hello, world!" int)
SELECT "Hello, world!" FROM "The world's most awful table name"
Versi Panjang
Awalnya, SQL Server mengizinkan Anda menggunakan tanda kutip ("..."
) dan apostrof ('...'
) di sekitar string secara bergantian (seperti yang dilakukan Javascript):
SELECT "Hello, world!"
--tanda kutipSELECT 'Hello, world!'
--apostrof
Dan jika Anda menginginkan tabel nama, tampilan, prosedur, kolom, dll. dengan sesuatu yang akan melanggar semua aturan penamaan objek, Anda dapat membungkusnya dalam kurung persegi ([
, ]
):
CREATE TABLE [The world's most awful table name] ([Hello, world!] int)
SELECT [Hello, world!] FROM [The world's most awful table name]
Dan itu semua berhasil, dan masuk akal.
Lalu datang ANSI
Kemudian ANSI datang dan punya ide lain:
- jika Anda memiliki nama yang funky, bungkus dengan tanda kutip (
"..."
) - gunakan tanda kutip (
'...'
) untuk string - dan kami bahkan tidak peduli dengan tanda kurung siku Anda
Artinya, jika Anda ingin "mengutip" kolom atau nama tabel yang funky Anda harus menggunakan tanda kutip:
SELECT "Hello, world!" FROM "The world's most awful table name"
Jika Anda tahu SQL Server, Anda tahu bahwa tanda kutip sudah digunakan untuk mewakili string. Jika Anda secara membabi buta mencoba menjalankan ANSI-SQL seolah-olah itu T-SQL :itu tidak masuk akal, dan SQL Server memberi tahu Anda:
Msg 102, Level 15, State 1, Line 8
Incorrect syntax near 'The world's most awful table name'.
Ini adalah moral yang setara dengan mencoba mengeksekusi:
SELECT 'Hello, world!' FROM 'The world''s most awful table name'
Yang seperti mengeksekusi:
SELECT 'string' FROM 'string'
Anda harus ikut serta dalam perilaku ANSI baru
Jadi Microsoft menambahkan fitur untuk memungkinkan Anda ikut serta dalam rasa ANSI dari SQL.
Asli (atau QUOTED_IDENTIFIER
mati) :
SELECT "Hello, world!" --valid
SELECT 'Hello, world!' --valid
ATUR QUOTED_IDENTIFIER AKTIF :
SELECT "Hello, world!" --INVALID
SELECT 'Hello, world!' --valid
SQL Server masih memungkinkan Anda menggunakan [square brackets]
, daripada memaksa Anda untuk menggunakan "quotation marks"
. Namun dengan QUOTED_IDENTIFIER AKTIF, Anda tidak bisa gunakan "double quote quotation mark around strings"
, Anda hanya boleh menggunakan 'the single quote apostrophe'
.