適用於:SQL Server
Azure SQL Database
Azure SQL 受控執行個體
Azure Synapse Analytics
Microsoft Fabric 中的 SQL 分析端點
Microsoft Fabric 中的倉庫
Microsoft Fabric 中的 SQL 資料庫
QUOTED_IDENTIFIER 設定使SQL Server遵守 ISO 規則,規範引號分隔識別碼 以及字串。 如果你用雙引號來分隔識別碼,你可以使用 Transact-SQL 保留關鍵字,或是加入 Transact-SQL 語法規則通常不允許的字元。
Syntax
SQL Server、Azure SQL Database、Azure Synapse Analytics 中的 serverless SQL pool 和 Microsoft Fabric 的語法。
SET QUOTED_IDENTIFIER { ON | OFF }
Syntax for Azure Synapse Analytics.
SET QUOTED_IDENTIFIER ON
備註
當你設定 SET QUOTED_IDENTIFIER 為 ON (預設值)時,可以使用雙引號("")來分隔識別碼,而必須使用單引號('')來分隔文字。 所有以雙引號包圍的字串都會被解讀為物件識別碼。 引號識別碼不需要遵循 Transact-SQL 的識別碼規則。 它們可以是關鍵字,且可能包含 Transact-SQL 識別碼中不允許的字元。 如果識別碼中有雙引號(")表示,可以用兩個雙引號("")表示。 你必須設定 SET QUOTED_IDENTIFIER 為 , ON 當你在資料庫中為物件名稱使用保留關鍵字時。
當你把 SET QUOTED_IDENTIFIER 設成 OFF 時,你就不能引用識別碼,且必須遵守所有Transact-SQL識別碼規則。 如需詳細資訊,請參閱 資料庫標識符。 你可以用單引號或雙引號來區隔文字。 如果你用雙引號來界定字串,字串中可能包含單引號,例如撇號。
注意
QUOTED_IDENTIFIER不會影響以括弧 (和[) 括住的分隔標識符。]
你必須在SET QUOTED_IDENTIFIER建立或更改計算欄位或索引檢視的索引時設定為 。ON 如果你設定 SET QUOTED_IDENTIFIER 為 OFF、 CREATE、 UPDATE、 INSERT,且 DELETE 在計算欄位索引的表格或索引檢視表上,陳述句會失敗。 欲了解更多關於索引檢視及計算欄位索引的選項 SET 設定,請參閱 使用 SET 語句時的考量。
你必須設定 SET QUOTED_IDENTIFIER 為 , ON 才能建立篩選索引。
你必須在呼叫 SET QUOTED_IDENTIFIER 資料型別方法時設定ON為 。
SQL Server Native Client ODBC 驅動程式與 SQL Server Native Client OLE DB Provider for SQL Server 在連接時會自動將 QUOTED_IDENTIFIER 設定為 ON。 你可以在 ODBC 資料來源、ODBC 連線屬性或 OLE DB 連線屬性中設定此設定。 的預設值 SET QUOTED_IDENTIFIER 是 OFF DB-Library 應用程式的連線。
當你建立表格時,表格的元資料總是會儲存這個QUOTED_IDENTIFIER選項,即使ON你在建立表格時設定為 。OFF
當你建立儲存程序時, SET QUOTED_IDENTIFIER 和 SET ANSI_NULLS 設定會被擷取並用於該儲存程序的後續呼叫。
當你在儲存程序中執行 SET QUOTED_IDENTIFIER 時,設定不會改變。
當你設定SET ANSI_DEFAULTS為 時,ON也設定為 QUOTED_IDENTIFIERON。
SET QUOTED_IDENTIFIER 對應 QUOTED_IDENTIFIER 於 的 ALTER DATABASE設定。
SET QUOTED_IDENTIFIER 在Transact-SQL解析時生效,僅影響解析,不影響查詢優化或查詢執行。
針對最上層臨機操作批次,剖析會開始使用 會話的目前設定 QUOTED_IDENTIFIER。 當批次被解析時,任何發生的 都會 SET QUOTED_IDENTIFIER 改變從那時起的解析行為,並將該設定保存給該會話。 因此,批次解析並執行後,會根據批次中最後一次出現的 來QUOTED_IDENTIFIER設定會話SET QUOTED_IDENTIFIER的設定。
儲存程序中的靜態Transact-SQL會依據建立或修改儲存程序的批次所生效的 QUOTED_IDENTIFIER 設定進行解析。
SET QUOTED_IDENTIFIER 在儲存程序的主體中以靜態Transact-SQL出現時則無效。
對於使用 sp_executesql 或 exec()的巢狀批次,解析會從 QUOTED_IDENTIFIER 會話的設定開始。 如果巢狀批次位於預存程式內,剖析會使用 QUOTED_IDENTIFIER 預存程式的設定開始。 剖析巢狀批次時,任何發生 SET QUOTED_IDENTIFIER 時都會從該點變更剖析行為,但會話的 QUOTED_IDENTIFIER 設定不會更新。
若要檢視此設定的目前設定,請執行下列查詢:
DECLARE @QUOTED_IDENTIFIER AS VARCHAR (3) = 'OFF';
IF ((256 & @@OPTIONS) = 256)
BEGIN
SET @QUOTED_IDENTIFIER = 'ON';
END
SELECT @QUOTED_IDENTIFIER AS QUOTED_IDENTIFIER;
權限
需要成為 公開 固定資料庫角色的成員。
範例
A. 使用引號識別碼設定和保留字物件名稱
以下範例顯示 SET QUOTED_IDENTIFIER ,設定必須是 ON,且表格名稱中的關鍵字必須以雙引號標示,才能建立及使用保留關鍵字名稱的物件。
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. 使用引號標識碼設定搭配單引號和雙引號
以下範例展示了在設 SET QUOTED_IDENTIFIER 為 ON 和 OFF的字串表達式中,單引號與雙引號的使用方式。
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
結果集如下所示。
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
相關內容
- CREATE DATABASE
- CREATE DEFAULT (Transact-SQL)
- CREATE PROCEDURE (Transact-SQL)
- CREATE RULE (Transact-SQL)
- CREATE TABLE (Transact-SQL)
- CREATE TRIGGER (Transact-SQL)
- CREATE VIEW (Transact-SQL)
- 資料型別 (Transact-SQL)
- EXECUTE (Transact-SQL)
- SELECT (Transact-SQL)
- SET 陳述式(Transact-SQL)
- SET ANSI_DEFAULTS (Transact-SQL)
- sys.sp_rename(Transact-SQL)
- 資料庫標識碼