Bagikan melalui


SET QUOTED_IDENTIFIER (Transact-SQL)

Berlaku untuk: Titik akhir analitik SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Platform System (PDW) SQL di Microsoft Fabric Warehouse di Microsoft Fabric

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.

Konvensi sintaks transact-SQL

Sintaks

Sintaks untuk SQL Server, Azure SQL Database, kumpulan SQL tanpa server di Azure Synapse Analytics, dan Microsoft Fabric.

SET QUOTED_IDENTIFIER { ON | OFF }

Sintaks untuk Azure Synapse Analytics dan Gudang Data Paralel.

SET QUOTED_IDENTIFIER ON

Keterangan

Kapan SET QUOTED_IDENTIFIER ( ON default), pengidentifikasi dapat dibatasi dengan tanda kutip ganda (""), dan literal harus dibatasi dengan tanda kutip tunggal (''). Semua string yang dibatasi oleh tanda kutip ganda ditafsirkan sebagai pengidentifikasi objek. Pengidentifikasi yang dikutip tidak harus mengikuti aturan Transact-SQL untuk pengidentifikasi. Mereka dapat menjadi kata kunci dan dapat menyertakan karakter yang tidak diizinkan dalam pengidentifikasi Transact-SQL. Jika tanda kutip ganda (") adalah bagian dari pengidentifikasi, tanda kutip ganda dapat diwakili oleh dua tanda kutip ganda (""). SET QUOTED_IDENTIFIER harus ON ketika kata kunci yang dipesan digunakan untuk nama objek dalam database.

Ketika SET QUOTED_IDENTIFIER adalah OFF, 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 dalam tanda kurung siku ([ dan ]).

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

SET QUOTED_IDENTIFIER harus ON ketika Anda membuat indeks yang difilter.

SET QUOTED_IDENTIFIER harus ON ketika Anda memanggil metode jenis data xml .

Driver ODBC SQL Server Native Client dan SQL Server Native Client OLE DB Provider untuk SQL Server secara otomatis diatur QUOTED_IDENTIFIER ke ON saat menyambungkan. Ini dapat dikonfigurasi di sumber data ODBC, di atribut koneksi ODBC, atau properti koneksi OLE DB. Default untuk SET QUOTED_IDENTIFIER adalah OFF untuk koneksi dari aplikasi DB-Library.

Saat tabel dibuat, QUOTED IDENTIFIER opsi selalu disimpan seperti ON dalam metadata tabel meskipun opsi diatur ke OFF saat tabel dibuat.

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

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

Ketika SET ANSI_DEFAULTS adalah ON, QUOTED_IDENTIFIER juga ON.

SET QUOTED_IDENTIFIERQUOTED_IDENTIFIER sesuai dengan pengaturan ALTER DATABASE.

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

Untuk batch ad hoc tingkat atas, penguraian mulai menggunakan pengaturan sesi saat ini untuk QUOTED_IDENTIFIER. Karena batch diurai setiap kemunculan perubahan perilaku penguraian SET QUOTED_IDENTIFIER dari titik itu, dan simpan pengaturan tersebut untuk sesi. Jadi setelah batch diurai dan dijalankan, pengaturan sesi QUOTED_IDENTIFIER akan diatur sesuai dengan kejadian SET QUOTED_IDENTIFIER terakhir dalam batch.

Static Transact-SQL dalam prosedur tersimpan diurai menggunakan QUOTED_IDENTIFIER pengaturan 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 QUOTED_IDENTIFIER pengaturan sesi. Jika batch berlapis berada di dalam prosedur tersimpan, penguraian mulai menggunakan QUOTED_IDENTIFIER pengaturan prosedur tersimpan. Saat batch berlapis diurai, setiap kemunculan SET QUOTED_IDENTIFIER perubahan perilaku penguraian sejak saat itu, tetapi pengaturan sesi QUOTED_IDENTIFIER tidak diperbarui.

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

DECLARE @QUOTED_IDENTIFIER VARCHAR(3) = 'OFF';

IF ((256 & @@OPTIONS) = 256)
BEGIN
    SET @QUOTED_IDENTIFIER = 'ON';
END

SELECT @QUOTED_IDENTIFIER AS QUOTED_IDENTIFIER;

Izin

Memerlukan keanggotaan dalam peran publik .

Contoh

J. Gunakan 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 memiliki nama kata kunci yang dipesan.

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. Gunakan 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 AdventureWorks2022;
GO

IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_NAME = 'Test')
    DROP TABLE dbo.Test;
GO

USE AdventureWorks2022;
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 set hasilnya.

 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