Transact-SQL 語法約定
語法
SET QUOTED_IDENTIFIER { ON | OFF } |
注釋
當 SET QUOTED_IDENTIFIER 為 ON 時,標識符可以由雙引號分隔,而文字必須由單引號分隔。當 SET QUOTED_IDENTIFIER 為 OFF 時,標識符不可加引號,且必須符合所有 Transact-SQL 標識符規則。有關詳細信息,請參閱標識符。文字可以由單引號或雙引號分隔。
當 SET QUOTED_IDENTIFIER 為 ON(默認值)時,由雙引號分隔的所有字符串都被解釋為對象標識符。因此,加引號的標識符不必符合 Transact-SQL 標識符規則。它們可以是保留關鍵字,並且可以包含 Transact-SQL 標識符中通常不允許的字符。不能使用雙引號分隔文字字符串表達式,而必須用單引號括住文字字符串。如果單引號 (') 是文字字符串的一部分,則可以由兩個單引號 (") 表示。當對數據庫中的對象名使用保留關鍵字時,SET QUOTED_IDENTIFIER 必須為 ON。
當 SET QUOTED_IDENTIFIER 為 OFF 時,表達式中的文字字符串可以由單引號或雙引號分隔。如果文字字符串由雙引號分隔,則可以在字符串中包含嵌入式單引號,如省略號。
當在計算列或索引視圖上創建或更改索引時,SET QUOTED_IDENTIFIER 必須為 ON。如果 SET QUOTED_IDENTIFIER 為 OFF,則計算列或索引視圖上帶索引的表上的 CREATE、UPDATE、INSERT 和 DELETE 語句將失敗。有關計算列的索引視圖和索引所必需的 SET 選項設置的詳細信息,請參閱 SET (Transact-SQL) 中的“使用 SET 語句時的注意事項”。
在進行連接時,SQL Server Native Client ODBC 驅動程序和 SQL Server Native Client OLE DB Provider for SQL Server 自動將 QUOTED_IDENTIFIER 設置為 ON。這可以在 ODBC 數據源、ODBC 連接特性或 OLE DB 連接屬性中進行配置。對來自 DB-Library 應用程序的連接,SET QUOTED_IDENTIFIER 默認設置為 OFF。
創建表時,即使此時將 QUOTED IDENTIFIER 選項設置為 OFF,該選項在表的元數據中仍始終存儲為 ON。
創建存儲過程時,將捕獲 SET QUOTED_IDENTIFIER 和 SET ANSI_NULLS 設置,並用於該存儲過程的后續調用。
在存儲過程內執行 SET QUOTED_IDENTIFIER 時,其設置不更改。
當 SET ANSI_DEFAULTS 為 ON 時,將啟用 SET QUOTED_IDENTIFIER。
SET QUOTED_IDENTIFIER 還與 ALTER DATABASE 的 QUOTED_IDENTIFER 設置相對應。有關數據庫設置的詳細信息,請參閱 ALTER DATABASE (Transact-SQL) 和設置數據庫選項。
SET QUOTED_IDENTIFIER 是在分析時進行設置的。在分析時進行設置意味着:SET 語句只要出現在批處理或存儲過程中即生效,與代碼執行實際上是否到達該點無關;並且 SET 語句在任何語句執行之前生效。
權限
要求具有 public 角色的成員身份。
示例
A. 使用加引號的標識符設置和保留字對象名
以下示例顯示 SET QUOTED_IDENTIFIER
設置必須為 ON
,而且表名內的關鍵字必須在雙引號內,才能創建和使用具有保留關鍵字名稱的對象。
![]() |
|
---|---|
SET QUOTED_IDENTIFIER OFF GO -- An attempt to create a table with a reserved keyword as a name -- should fail. CREATE TABLE "select" ("identity" INT IDENTITY NOT NULL, "order" INT NOT NULL); GO SET QUOTED_IDENTIFIER ON; GO -- Will succeed. 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 AdventureWorks2008R2; IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Test') DROP TABLE dbo.Test; GO USE AdventureWorks2008R2; 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