SET QUOTED_IDENTIFIER (Transact-SQL)

Berlaku untuk: SQL Server (semua versi yang didukung) Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

Menyebabkan SQL Server mengikuti aturan ISO mengenai tanda kutip yang memisahkan pengidentifikasi dan string harfiah. Pengidentifikasi yang dibatasi oleh tanda kutip ganda dapat berupa kata kunci yang dipesan Transact-SQL atau dapat berisi karakter yang umumnya tidak diizinkan oleh aturan sintaks Transact-SQL untuk pengidentifikasi.

Ikon tautan topikKonvensi Sintaks Transact-SQL

Sintaks

-- Syntax for SQL Server, Azure SQL Database and serverless SQL pool in Azure Synapse Analytics

SET QUOTED_IDENTIFIER { ON | OFF }
-- Syntax for Azure Synapse Analytics and Parallel Data Warehouse

SET QUOTED_IDENTIFIER ON

Catatan

Untuk melihat sintaks Transact-SQL untuk SQL Server 2014 dan yang lebih lama, lihat Dokumentasi versi sebelumnya.

Keterangan

Ketika SET QUOTED_IDENTIFIER AKTIF (default), pengidentifikasi dapat dibatasi dengan tanda kutip ganda (" "), dan harfiah harus dibatasi dengan tanda kutip tunggal (' '). Semua string yang dibatasi oleh tanda kutip ganda ditafsirkan sebagai pengidentifikasi objek. Oleh karena itu, pengidentifikasi yang dikutip tidak harus mengikuti aturan Transact-SQL untuk pengidentifikasi. Mereka dapat dicadangkan kata kunci dan dapat menyertakan karakter yang umumnya tidak diizinkan dalam pengidentifikasi Transact-SQL. Tanda kutip ganda tidak dapat digunakan untuk memisahkan ekspresi string literal; tanda kutip tunggal harus digunakan untuk mengapit string literal. Jika tanda kutip tunggal (') adalah bagian dari string literal, tanda kutip tunggal dapat diwakili oleh dua tanda kutip tunggal (''). SET QUOTED_IDENTIFIER harus AKTIF ketika kata kunci yang dicadangkan digunakan untuk nama objek dalam database.

Ketika SET QUOTED_IDENTIFIER NONAKTIF, pengidentifikasi tidak dapat dikutip dan harus mengikuti semua aturan Transact-SQL untuk pengidentifikasi. Untuk informasi selengkapnya, lihat Pengidentifikasi Database. Literal dapat dibatasi dengan tanda kutip tunggal atau ganda. Jika string literal dibatasi oleh tanda kutip ganda, string dapat berisi tanda kutip tunggal yang disematkan, seperti apostrof.

Catatan

QUOTED_IDENTIFIER tidak memengaruhi pengidentifikasi yang dibatasi yang diapit tanda kurung siku ([ ]).

SET QUOTED_IDENTIFIER harus AKTIF saat Anda membuat atau mengubah indeks pada kolom komputasi atau tampilan terindeks. Jika SET QUOTED_IDENTIFIER NONAKTIF, pernyataan CREATE, UPDATE, INSERT, dan DELETE akan gagal pada tabel dengan indeks pada kolom komputasi, atau tabel dengan tampilan terindeks. Untuk informasi selengkapnya tentang pengaturan opsi SET yang diperlukan dengan tampilan dan indeks terindeks pada kolom komputasi, lihat Pertimbangan saat Anda menggunakan pernyataan SET.

SET QUOTED_IDENTIFIER harus AKTIF saat Anda membuat indeks yang difilter.

SET QUOTED_IDENTIFIER harus AKTIF ketika Anda memanggil metode tipe data XML.

Driver SQL Server Native Client ODBC dan Penyedia SQL Server Native Client OLE DB untuk SQL Server secara otomatis mengatur QUOTED_IDENTIFIER ke AKTIF saat menyambungkan. Ini dapat dikonfigurasi di sumber data ODBC, dalam atribut koneksi ODBC, atau properti koneksi OLE DB. Default untuk SET QUOTED_IDENTIFIER NONAKTIF untuk koneksi dari aplikasi DB-Library.

Saat tabel dibuat, opsi PENGIDENTIFIKASI DIKUTIP selalu disimpan sebagai AKTIF dalam metadata tabel meskipun opsi diatur ke NONAKTIF saat tabel dibuat.

Saat prosedur tersimpan dibuat, pengaturan SET QUOTED_IDENTIFIER dan SET ANSI_NULLS diambil dan digunakan untuk pemanggilan prosedur tersimpan berikutnya.

Ketika dijalankan di dalam prosedur tersimpan, pengaturan SET QUOTED_IDENTIFIER tidak diubah.

Ketika SET ANSI_DEFAULTS AKTIF, QUOTED_IDENTIFIER juga AKTIF.

SET QUOTED_IDENTIFIER juga sesuai dengan pengaturan QUOTED_IDENTIFIER ALTER DATABASE.

SET QUOTED_IDENTIFIER berlaku pada parse-time Transact-SQL dan hanya memengaruhi penguraian, bukan pengoptimalan kueri atau eksekusi kueri.

Untuk penguraian batch ad-hoc tingkat atas dimulai menggunakan pengaturan sesi saat ini untuk QUOTED_IDENTIFIER. Karena batch diurai, kemunculan apa pun akan mengubah perilaku penguraian SET QUOTED_IDENTIFIER dari titik itu, dan menyimpan pengaturan tersebut untuk sesi. Jadi setelah batch diurai dan dijalankan, pengaturan QUOTED_IDENTIFER sesi akan diatur sesuai dengan kejadian SET QUOTED_IDENTIFIER terakhir dalam batch.

Transact-SQL Statis dalam prosedur tersimpan diurai menggunakan pengaturan QUOTED_IDENTIFIER yang berlaku untuk batch yang membuat atau mengubah prosedur tersimpan. SET QUOTED_IDENTIFIER tidak berpengaruh ketika muncul dalam isi prosedur tersimpan sebagai Transact-SQL statis.

Untuk batch berlapis menggunakan sp_executesql atau exec(), penguraian dimulai menggunakan pengaturan QUOTED_IDENTIFIER sesi. Jika batch berlapis berada di dalam prosedur tersimpan, penguraian mulai menggunakan pengaturan QUOTED_IDENTIFIER prosedur tersimpan. Saat batch berlapis diurai, kemunculan apa pun akan mengubah perilaku penguraian SET QUOTED_IDENTIFIER dari titik itu, tetapi pengaturan QUOTED_IDENTIFIER sesi tidak akan diperbarui.

Untuk menampilkan pengaturan saat ini untuk pengaturan ini, jalankan kueri berikut ini:

DECLARE @QUOTED_IDENTIFIER VARCHAR(3) = 'OFF';
IF ( (256 & @@OPTIONS) = 256 ) 
BEGIN
    SET @QUOTED_IDENTIFIER = 'ON';
END

SELECT @QUOTED_IDENTIFIER AS QUOTED_IDENTIFIER;

Izin

Membutuhkan keanggotaan dalam peran.PUBLIC

Contoh

A. Menggunakan pengaturan pengidentifikasi yang dikutip dan nama objek kata yang dipesan

Contoh berikut menunjukkan bahwa SET QUOTED_IDENTIFIER pengaturan harus ON, dan kata kunci dalam nama tabel harus dalam tanda kutip ganda untuk membuat dan menggunakan objek yang telah mencadangkan nama kata kunci.

SET QUOTED_IDENTIFIER OFF
GO

-- Create statement fails.
CREATE TABLE "select" ("identity" INT IDENTITY NOT NULL, "order" INT NOT NULL);
GO

SET QUOTED_IDENTIFIER ON;
GO

-- Create statement succeeds.
CREATE TABLE "select" ("identity" INT IDENTITY NOT NULL, "order" INT NOT NULL);
GO

SELECT "identity","order"
FROM "select"
ORDER BY "order";
GO

DROP TABLE "SELECT";
GO

SET QUOTED_IDENTIFIER OFF;
GO

B. Menggunakan pengaturan pengidentifikasi yang dikutip dengan tanda kutip tunggal dan ganda

Contoh berikut menunjukkan cara tanda kutip tunggal dan ganda digunakan dalam ekspresi string dengan SET QUOTED_IDENTIFIER diatur ke ON dan OFF.

SET QUOTED_IDENTIFIER OFF;
GO

USE AdventureWorks2012;
IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_NAME = 'Test')
    DROP TABLE dbo.Test;
GO
USE AdventureWorks2012;
CREATE TABLE dbo.Test (ID INT, String VARCHAR(30)) ;
GO

-- Literal strings can be in single or double quotation marks.
INSERT INTO dbo.Test VALUES (1, "'Text in single quotes'");
INSERT INTO dbo.Test VALUES (2, '''Text in single quotes''');
INSERT INTO dbo.Test VALUES (3, 'Text with 2 '''' single quotes');
INSERT INTO dbo.Test VALUES (4, '"Text in double quotes"');
INSERT INTO dbo.Test VALUES (5, """Text in double quotes""");
INSERT INTO dbo.Test VALUES (6, "Text with 2 """" double quotes");
GO

SET QUOTED_IDENTIFIER ON;
GO

-- Strings inside double quotation marks are now treated
-- as object names, so they cannot be used for literals.
INSERT INTO dbo."Test" VALUES (7, 'Text with a single '' quote');
GO

-- Object identifiers do not have to be in double quotation marks
-- if they are not reserved keywords.
SELECT ID, String
FROM dbo.Test;
GO

DROP TABLE dbo.Test;
GO

SET QUOTED_IDENTIFIER OFF;
GO

Berikut adalah hasil yang ditetapkan.

 ID          String
 ----------- ------------------------------
 1           'Text in single quotes'
 2           'Text in single quotes'
 3           Text with 2 '' single quotes
 4           "Text in double quotes"
 5           "Text in double quotes"
 6           Text with 2 "" double quotes
 7           Text with a single ' quote

Lihat juga

BUAT DATABASE
BUAT DEFAULT
CREATE PROCEDURE
BUAT ATURAN
CREATE TABLE
CREATE TRIGGER
CREATE VIEW
Jenis Data
EXECUTE
PILIH
Pernyataan SET
SET ANSI_DEFAULTS
sp_rename
Pengidentifikasi Database