Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Memahami QUOTED_IDENTIFIER

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 kutip
  • SELECT 'Hello, world!' --apostrof
  • CREATE 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 string
  • SELECT 'Hello, world!' --apostrof
  • CREATE 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 kutip
  • SELECT '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' .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. JSON_QUERY() vs JSON_VALUE() di SQL Server:Apa Bedanya?

  2. Cara Mengirim Email HTML dari SQL Server (T-SQL)

  3. Gunakan NEWID() untuk Membuat Nilai Unik di SQL Server

  4. Apakah Integrasi SQL Server CLR mendukung file konfigurasi?

  5. Transpose satu set baris sebagai kolom di SQL Server 2000