使 Microsoft® SQL Server™ 遵從關(guān)于引號分隔標(biāo)識符和文字字符串的 SQL-92 規(guī)則。由雙引號分隔的標(biāo)識符可以是 Transact-SQL 保留關(guān)鍵字,或者可以包含 Transact-SQL 標(biāo)識符語法規(guī)則通常不允許的字符。
SET QUOTED_IDENTIFIER { ON | OFF }
當(dāng) SET QUOTED_IDENTIFIER 為 ON 時,標(biāo)識符可以由雙引號分隔,而文字必須由單引號分隔。當(dāng) SET QUOTED_IDENTIFIER 為 OFF 時,標(biāo)識符不可加引號,且必須遵守所有 Transact-SQL 標(biāo)識符規(guī)則。有關(guān)更多信息,請參見使用標(biāo)識符。文字可以由單引號或雙引號分隔。
當(dāng) SET QUOTED_IDENTIFIER 為 ON 時,由雙引號分隔的所有字符串都被解釋為對象標(biāo)識符。因此,加引號的標(biāo)識符不必遵守 Transact-SQL 標(biāo)識符規(guī)則。它們可以是保留關(guān)鍵字,并且可以包含 Transact-SQL 標(biāo)識符中通常不允許的字符。不能使用雙引號分隔文字字符串表達(dá)式,而必須用單引號括住文字字符串。如果單引號 (') 是文字字符串的一部分,則可以由兩個單引號 ('') 表示。當(dāng)對數(shù)據(jù)庫中的對象名使用保留關(guān)鍵字時,SET QUOTED_IDENTIFIER 必須為 ON。
當(dāng) SET QUOTED_IDENTIFIER 為 OFF(默認(rèn)值)時,表達(dá)式中的文字字符串可以由單引號或雙引號分隔。如果文字字符串由雙引號分隔,則可以在字符串中包含嵌入式單引號,如省略號。
當(dāng)在計算列或索引視圖上創(chuàng)建或操作索引時,SET QUOTED_IDENTIFIER 必須為 ON。如果 SET QUOTED_IDENTIFIER 為 OFF,則計算列或索引視圖上帶索引的表上的 CREATE、UPDATE、INSERT 和 DELETE 語句將失敗。有關(guān)計算列上的索引視圖和索引所必需的 SET 選項設(shè)置的更多信息,請參見 SET 中的"使用 SET 語句時的注意事項"。
在進(jìn)行連接時,SQL Server ODBC 驅(qū)動程序和用于 SQL Server 的 Microsoft OLE DB 提供程序自動將 QUOTED_IDENTIFIER 設(shè)置為 ON。這可以在 ODBC 數(shù)據(jù)源、ODBC 連接特性或 OLE DB 連接屬性中進(jìn)行配置。對來自 DB-Library 應(yīng)用程序的連接,SET QUOTED_IDENTIFIER 設(shè)置默認(rèn)為 OFF。
當(dāng)創(chuàng)建存儲過程時,將捕獲 SET QUOTED_IDENTIFIER 和 SET ANSI_NULLS 設(shè)置,用于該存儲過程的后續(xù)調(diào)用。
當(dāng)在存儲過程內(nèi)執(zhí)行 SET QUOTED_IDENTIFIER 時,其設(shè)置不更改。
當(dāng) SET ANSI_DEFAULTS 為 ON時,將啟用 SET QUOTED_IDENTIFIER。
SET QUOTED_IDENTIFIER 還與 sp_dboption 的 quoted identifier 設(shè)置相對應(yīng)。如果 SET QUOTED_IDENTIFIER 為 OFF,則 SQL Server 使用 sp_dboption 的 quoted identifier 設(shè)置。有關(guān)數(shù)據(jù)庫設(shè)置的更多信息,請參見 sp_dboption 和設(shè)置數(shù)據(jù)庫選項。
SET QUOTED_IDENTIFIER 是在分析時進(jìn)行設(shè)置的。在分析時進(jìn)行設(shè)置意味著:SET 語句只要出現(xiàn)在批處理或存儲過程中即生效,與代碼執(zhí)行實際上是否到達(dá)該點無關(guān);并且 SET 語句在任何語句執(zhí)行之前生效。
SET QUOTED_IDENTIFIER 權(quán)限默認(rèn)授予所有用戶。
下例顯示 SET QUOTED_IDENTIFIER 設(shè)置必須為 ON,而且表名內(nèi)的關(guān)鍵字必須在雙引號內(nèi),才能創(chuàng)建和使用帶保留關(guān)鍵字的對象名。
SET QUOTED_IDENTIFIER OFF
GO
-- Attempt to create a table with a reserved keyword as a name
-- should fail.
CREATE TABLE "select" ("identity" int IDENTITY, "order" int)
GO
SET QUOTED_IDENTIFIER ON
GO
-- Will succeed.
CREATE TABLE "select" ("identity" int IDENTITY, "order" int)
GO
SELECT "identity","order"
FROM "select"
ORDER BY "order"
GO
DROP TABLE "SELECT"
GO
SET QUOTED_IDENTIFIER OFF
GO
下例顯示將 SET QUOTED_IDENTIFIER 設(shè)置為 ON 和 OFF 時,在字符串表達(dá)式中使用單引號和雙引號的方式。
SET QUOTED_IDENTIFIER OFF
GO
USE pubs
IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS
WHERE TABLE_NAME = 'Test')
DROP TABLE Test
GO
USE pubs
CREATE TABLE Test ( Id int, String varchar (30) )
GO
-- Literal strings can be in single or double quotation marks.
INSERT INTO Test VALUES (1,"'Text in single quotes'")
INSERT INTO Test VALUES (2,'''Text in single quotes''')
INSERT INTO Test VALUES (3,'Text with 2 '''' single quotes')
INSERT INTO Test VALUES (4,'"Text in double quotes"')
INSERT INTO Test VALUES (5,"""Text in double quotes""")
INSERT INTO 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 "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 *
FROM Test
GO
DROP TABLE Test
GO
SET QUOTED_IDENTIFIER OFF
GO
下面是結(jié)果集:
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
相關(guān)文章