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.
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 CREATE
pernyataan , 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_IDENTIFIER
QUOTED_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
Konten terkait
- MEMBUAT DATABASE
- CREATE DEFAULT (Transact-SQL)
- CREATE PROCEDURE (Transact-SQL)
- BUAT ATURAN (Transact-SQL)
- BUAT TABEL (Transact-SQL)
- BUAT PEMICU (Transact-SQL)
- CREATE VIEW (Transact-SQL)
- Jenis data (Transact-SQL)
- EXECUTE (Transact-SQL)
- SELECT (Transact-SQL)
- Pernyataan SET (Transact-SQL)
- SET ANSI_DEFAULTS (Transact-SQL)
- sp_rename
- Pengidentifikasi database