Aracılığıyla paylaş


SET QUOTED_IDENTIFIER (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiAzure Synapse AnalyticsAnaliz Platformu Sistemi (PDW)Microsoft Fabric'teki SQL analiz uç noktasıMicrosoft Fabric'teki ambarMicrosoft Fabric'teki SQL veritabanı

SQL Server'ın, tanımlayıcıları ve literal dizeleri ayıran tırnak işareti ile ilgili ISO kurallarına uymasına neden olur. Çift tırnak işaretiyle sınırlandırılan tanımlayıcılar ya ayrılmış anahtar kelimeler olabilir Transact-SQL ya da tanımlayıcılar için Transact-SQL sözdizimi kurallarında genellikle izin verilmeyen karakterler içerebilir.

Transact-SQL söz dizimi kuralları

Sözdizimi

SQL Server, Azure SQL Database, Azure Synapse Analytics serverless SQL pool ve Microsoft Fabric için Syntax.

SET QUOTED_IDENTIFIER { ON | OFF }

Azure Synapse Analytics ve Paralel Veri Ambarı söz dizimi.

SET QUOTED_IDENTIFIER ON

Açıklamalar

Varsayıldığında ONSET QUOTED_IDENTIFIER, tanımlayıcılar çift tırnak işaretiyle ("") ayırılabilir ve literaller tek tırnak işaretleriyle ('') sınırlandırılmalıdır. Çift tırnak işaretiyle sınırlandırılan tüm dizeler, nesne tanımlayıcıları olarak yorumlanır. Alıntılanan tanımlayıcılar, tanımlayıcılar için Transact-SQL kurallarına uymak zorunda değildir. Anahtar kelime olabilirler ve Transact-SQL tanımlayıcılarında izin verilmeyen karakterleri içerebilirler. Eğer çift tırnak işareti (") tanımlayıcının bir parçasa ise, iki çift tırnak işareti ("") ile temsil edilebilir. SET QUOTED_IDENTIFIER veritabanında nesne adları için ayrılmış anahtar kelimeler kullanıldığında olmalıdır ON .

Ne SET QUOTED_IDENTIFIER zaman OFF, tanımlayıcılar alıntılanamaz ve tüm Transact-SQL kurallarına uymalıdır. Daha fazla bilgi için bkz . Veritabanı tanımlayıcıları. Literallar tek veya çift tırnak işaretiyle sınırlandırılabilir. Eğer bir literal dizi çift tırnak işaretiyle sınırlandırılırsa, dizide apostroflar gibi gömülü tek tırnak işaretleri bulunabilir.

Uyarı

QUOTED_IDENTIFIER parantez[ içinde ( ve ]) kapalı sınırlandırılmış tanımlayıcıları etkilemez.

SET QUOTED_IDENTIFIER hesaplanan sütunlarda veya dizinlenmiş görünümlerde dizin oluştururken veya değiştirirken olmalıdır ON . Eğer SET QUOTED_IDENTIFIEROFF, o zaman CREATE, UPDATE, INSERT, ve DELETE ifadeleri, hesaplanan sütunlarda indeksli tablolarda veya indekslenmiş görünümlü tablolarda başarısız olur. Hesaplanan sütunlarda indekslenmiş görünümler ve indekslerle ilgili gerekli SET seçenek ayarları hakkında daha fazla bilgi için, SET ifadelerini kullanırken Dikkate Alınanlar bölümüne bakabilirsiniz.

SET QUOTED_IDENTIFIER Filtrelenmiş bir indeks oluştururken olmalı ON .

SET QUOTED_IDENTIFIER XML veri tipi metodlarını çağırdığınızda olmalıON.

SQL Server Native Client ODBC sürücüsü ve SQL Server Native Client OLE DB Provider for SQL Server bağlandığında otomatik olarak QUOTED_IDENTIFIER ayarlanır.ON Bu, ODBC veri kaynaklarında, ODBC bağlantı özelliklerinde veya OLE DB bağlantı özelliklerinde yapılandırılabilir. Varsayılan olarak SET QUOTED_IDENTIFIEROFF DB-Library uygulamalardan gelen bağlantılar içindir.

Bir tablo oluşturulduğunda, QUOTED IDENTIFIER seçenek her zaman tablonun meta verisindeki gibi saklanır ON , hatta seçenek OFF tablo oluşturulduğunda ayarlanmış olsa bile.

Bir saklanan prosedür oluşturulduğunda, SET QUOTED_IDENTIFIER ve SET ANSI_NULLS ayarları kaydedilir ve o depolanmış prosedürün sonraki çağrıları için kullanılır.

Bir işlem içinde çalıştırıldığında, ' SET QUOTED_IDENTIFIER ayarı değişmez.

Ne SET ANSI_DEFAULTS zaman ON, QUOTED_IDENTIFIER aynı ONzamanda .

SET QUOTED_IDENTIFIER ALTER DATABASE ayarına karşılık QUOTED_IDENTIFIER gelir.

SET QUOTED_IDENTIFIER Transact-SQL ayrıştırma zamanında etki gösterir ve yalnızca ayrıştırmayı etkiler, sorgu optimizasyonu veya sorgu yürütülmesini değil.

Üst düzey ad hoc bir parti için, ayrıştırma oturumun mevcut ayarını kullanarak başlar.QUOTED_IDENTIFIER Toplu ayrıştırılırken, herhangi bir ayrıştırma SET QUOTED_IDENTIFIER davranışı o noktadan itibaren değişir ve bu ayarı oturum için saklayabilir. Yani toplu ayrıştırıp yürütüldükten sonra, oturumun QUOTED_IDENTIFIER ayarı partideki son gerçekleşmeye SET QUOTED_IDENTIFIER göre ayarlanır.

Bir depolanmış prosedürdeki statik Transact-SQL, depolanan prosedürü oluşturan veya değiştiren parti için geçerli olan ayar kullanılarak QUOTED_IDENTIFIER ayrıştırılır. SET QUOTED_IDENTIFIER Bir işlemin gövdesinde statik Transact-SQL olarak göründüğünde hiçbir etkisi olmaz.

İç içe bir parti için sp_executesql veya exec(), ayrıştırma oturumun ayarıyla başlar QUOTED_IDENTIFIER . İç içe bir toplu işlemin içindeyse, ayrıştırma depolanan prosedürün ayarı kullanılarak QUOTED_IDENTIFIER başlar. İç içe toplu ayrıştırıldıkça, herhangi bir şey SET QUOTED_IDENTIFIER o noktadan itibaren ayrıştırma davranışını değiştirir, ancak oturumun QUOTED_IDENTIFIER ayarı güncellenmez.

Bu ayarın mevcut ayarını görmek için aşağıdaki sorguyu çalıştırın:

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

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

SELECT @QUOTED_IDENTIFIER AS QUOTED_IDENTIFIER;

Permissions

"" genel "" rolüne üyelik gerektirir.

Örnekler

A. Alıntılı tanımlayıcı ayarını ve ayrılmış kelime nesne adlarını kullanın

Aşağıdaki örnek, SET QUOTED_IDENTIFIER ayarın , olması ONve tablo adlarındaki anahtar kelimelerin, ayrılmış anahtar kelime isimleri olan nesneler oluşturmak ve kullanmak için çift tırnak içinde olması gerektiğini göstermektedir.

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. Tırnak işaretli tanımlayıcı ayarını tek ve çift tırnak işaretleriyle kullanın

Aşağıdaki örnek, dize ifadelerinde tek ve çift tırnak işaretlerinin nasıl kullanıldığını SET QUOTED_IDENTIFIER ve OFF'ye ayarlandığını ON göstermektedir.

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

Sonuç kümesi aşağıdadır.

 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