SET QUOTED_IDENTIFIER (Transact-SQL)
適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Analytics Platform System (PDW) Microsoft Fabric 的 SQL 端點分析 Microsoft Fabric 的倉儲
使 SQL Server 遵循以引號分隔識別碼與常值字串的 ISO 規則。 以雙引號分隔的識別碼可能是 Transact-SQL 的保留關鍵字,或是包含 Transact-SQL 的識別碼語法規則通常不允許的字元。
Syntax
SQL Server、Azure SQL 資料庫、Azure Synapse Analytics 中的無伺服器 SQL 集區,以及 Microsoft Fabric 的語法。
SET QUOTED_IDENTIFIER { ON | OFF }
Azure Synapse Analytics 和平行處理數據倉儲的語法。
SET QUOTED_IDENTIFIER ON
注意
若要檢視 SQL Server 2014 (12.x) 和更早版本的 Transact-SQL 語法,請參閱舊版文件。
備註
當 SET QUOTED_IDENTIFIER
是 ON
時,標識碼可以用雙引號分隔(""
),而且常值必須以單引號分隔(''
)。 用雙引號來分隔的所有字串都會解譯為物件識別碼。 附加引號的識別碼不必遵循 Transact-SQL 的識別碼規則。 它們可以是關鍵字,也可以包括 Transact-SQL 識別碼不允許的字元。 如果雙引號 ("
) 是識別碼的一部分,則可以以兩個雙引號 (""
) 來表示。 SET QUOTED_IDENTIFIER
必須是 ON
當保留關鍵詞用於資料庫中的物件名稱時。
當 為 OFF
時SET QUOTED_IDENTIFIER
,標識碼不能加上引號,而且必須遵循標識碼的所有 Transact-SQL 規則。 如需詳細資訊,請參閱 資料庫標識符。 文字可以用單引號或雙引號來分隔。 如果用雙引號來分隔文字字串,字串便可以包含內嵌的單引號,如撇號。
注意
QUOTED_IDENTIFIER
不會影響以括弧 (和]
) 括住的分隔標識符。[
當要建立或變更計算資料行上的索引或索引檢視表時,SET QUOTED_IDENTIFIER
必須為 ON
。 如果 SET QUOTED_IDENTIFIER
為 OFF
,則 CREATE
、、 INSERT
UPDATE
和 DELETE
語句會在計算數據行的索引或具有索引檢視表的數據表上失敗。 如需在計算數據行上使用索引檢視表和索引的必要 SET
選項設定詳細資訊,請參閱 使用SET語句時的考慮。
SET QUOTED_IDENTIFIER
必須是 ON
當您建立篩選的索引時。
SET QUOTED_IDENTIFIER
必須是 ON
當您叫 用 xml 資料類型方法時。
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
設定。
當 為 ON
時SET ANSI_DEFAULTS
,QUOTED_IDENTIFIER
也是 ON
。
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 VARCHAR(3) = 'OFF';
IF ((256 & @@OPTIONS) = 256)
BEGIN
SET @QUOTED_IDENTIFIER = 'ON';
END
SELECT @QUOTED_IDENTIFIER AS QUOTED_IDENTIFIER;
權限
需要 public 角色的成員資格。
範例
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 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
以下為結果集。
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)
- sp_rename
- 資料庫標識碼