Aracılığıyla paylaş


SET QUOTED_IDENTIFIER (Transact-SQL)

Applies to:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiAzure Synapse AnalyticsAnalytics Platform Sistemi (PDW)SQL analiz uç noktası Microsoft FabricWarehouse in Microsoft FabricSQL database in Microsoft Fabric

QUOTED_IDENTIFIER ayarı, SQL Server tırnak işareti tanımlayıcıları ve değişmez değer dizeleri için ISO kurallarına uymasına neden olur. Tanımlayıcıları sınırlandırmak için çift tırnak işaretleri kullanırsanız, ayrılmış anahtar sözcükleri Transact-SQL kullanabilir veya Transact-SQL söz dizimi kurallarının genellikle tanımlayıcılara izin vermeyebileceği karakterler ekleyebilirsiniz.

Transact-SQL söz dizimi kuralları

Sözdizimi

SQL Server, Azure SQL Veritabanı, Azure Synapse Analytics ve Microsoft Fabric sunucusuz SQL havuzu için söz dizimi.

SET QUOTED_IDENTIFIER { ON | OFF }

Azure Synapse Analytics ve Paralel Data Warehouse söz dizimi.

SET QUOTED_IDENTIFIER ON

Açıklamalar

olarak ayarladığınızda SET QUOTED_IDENTIFIERON (varsayılan), tanımlayıcıları sınırlandırmak için çift tırnak işaretleri ("") kullanabilirsiniz ve değişmez değerleri sınırlandırmak için tek tırnak işaretleri ('') kullanmanız gerekir. Çift tırnak içine alınmış tüm dizeler nesne tanımlayıcıları olarak yorumlanır. Teklif edilen tanımlayıcıların tanımlayıcılar için Transact-SQL kurallarına uyması gerekmez. Anahtar sözcükler olabilir ve Transact-SQL tanımlayıcılarına izin verilmeyen karakterler içerebilirler. Çift tırnak işareti (") tanımlayıcının bir parçasıysa, bunu iki çift tırnak işaretiyle ("") temsil edebilirsiniz. Veritabanında nesne adları için ayrılmış anahtar sözcükler kullandığınızda olarak ayarlamanız SET QUOTED_IDENTIFIERON gerekir.

SET QUOTED_IDENTIFIER OFF olarak ayarladığınızda, tanımlayıcıları tırnak içine alamazsınız ve tanımlayıcılar için tüm Transact-SQL kurallarını izlemeleri gerekir. Daha fazla bilgi için bkz . Veritabanı tanımlayıcıları. Değişmez değerleri tek veya çift tırnak işaretleriyle sınırlandırabilirsiniz. Değişmez değer dizesini çift tırnak işaretiyle sınırlandırıyorsanız, dize kesme işaretleri gibi eklenmiş tek tırnak işaretleri içerebilir.

Uyarı

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

Hesaplanan sütunlarda veya dizinlenmiş görünümlerde dizin oluşturduğunuzda veya değiştirdiğinizde olarak ayarlamanız SET QUOTED_IDENTIFIERON gerekir. , , CREATE, UPDATEINSERTve DELETE deyimleri olarak ayarlarsanız SET QUOTED_IDENTIFIEROFFhesaplanan sütunlarda dizinleri olan tablolarda veya dizinli görünümlere sahip 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.

Filtrelenmiş dizin oluşturduğunuzda olarak ayarlamanız SET QUOTED_IDENTIFIERON gerekir.

xml veri türü yöntemlerini çağırırken olarak ayarlamanız SET QUOTED_IDENTIFIERON gerekir.

SQL Server için SQL Server Yerel İstemci ODBC sürücüsü ve SQL Server Yerel İstemci OLE DB Sağlayıcısı, bağlanırken QUOTED_IDENTIFIER otomatik olarak ON olarak ayarlar. Bu ayarı ODBC veri kaynaklarında, ODBC bağlantı özniteliklerinde veya OLE DB bağlantı özelliklerinde yapılandırabilirsiniz. Varsayılan olarak SET QUOTED_IDENTIFIEROFF DB-Library uygulamalardan gelen bağlantılar içindir.

Tablo oluşturduğunuzda, tabloyu oluştururken seçeneğini ON ayarlasanız bile, tablonun meta verileri her zaman seçeneği OFF depolarQUOTED_IDENTIFIER.

Saklı yordam oluşturduğunuzda ve SET QUOTED_IDENTIFIERSET ANSI_NULLS ayarları yakalanır ve bu saklı yordamın sonraki çağrıları için kullanılır.

Saklı yordam içinde yürütürken SET QUOTED_IDENTIFIER , ayar değişmez.

olarak ayarladığınızda SET ANSI_DEFAULTSONda QUOTED_IDENTIFIER olarak ayarlanır ON.

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

SET QUOTED_IDENTIFIER Transact-SQL ayrıştırma zamanında etkinleşir ve yalnızca ayrıştırma işlemini etkiler; sorgu iyileştirme veya sorgu yürütmeyi etkilemez.

Üst düzey ad hoc bir parti için, ayrıştırma oturumun mevcut ayarını kullanarak başlar.QUOTED_IDENTIFIER Toplu iş ayrıştırılırken, herhangi bir oluşum SET QUOTED_IDENTIFIER söz konusu noktadan itibaren ayrıştırma davranışını değiştirir ve bu ayarı oturum için kaydeder. Bu nedenle, toplu iş ayrıştırılıp yürütüldükten sonra, oturumun QUOTED_IDENTIFIER ayarı toplu işteki son oluşumuna SET QUOTED_IDENTIFIER göre ayarlanır.

Saklı yordamdaki statik Transact-SQL, saklı yordamı oluşturan veya değiştiren toplu işlem için geçerli QUOTED_IDENTIFIER ayarı kullanılarak ayrıştırılır. SET QUOTED_IDENTIFIER, saklı yordamın gövdesinde statik Transact-SQL olarak göründüğünde hiçbir etkisi yoktur.

sp_executesql veya exec()kullanan iç içe toplu iş için ayrıştırma, oturumun QUOTED_IDENTIFIER ayarını kullanmaya başlar. İç 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 AS VARCHAR (3) = 'OFF';

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

SELECT @QUOTED_IDENTIFIER AS QUOTED_IDENTIFIER;

Permissions

Ortak sabit veritabanı 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 örnekte, ayrılmış anahtar sözcük adlarıyla nesne oluşturmak ve kullanmak için ayarın ONolması ve tablo adlarındaki anahtar sözcüklerin çift tırnak içinde olması gerektiği gösterilmektedirSET QUOTED_IDENTIFIER.

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, ve OFFolarak ayarlanmış ON dize ifadelerinde tek ve çift tırnak işaretlerinin SET QUOTED_IDENTIFIER nasıl kullanıldığını gösterir.

SET QUOTED_IDENTIFIER OFF;
GO

USE AdventureWorks2025;
GO

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

USE AdventureWorks2025;
GO

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