使 Microsoft® SQL Server™ 遵從關(guān)于引號(hào)分隔標(biāo)識(shí)符和文字字符串的 SQL-92 規(guī)則。由雙引號(hào)分隔的標(biāo)識(shí)符可以是 Transact-SQL 保留關(guān)鍵字,或者可以包含 Transact-SQL 標(biāo)識(shí)符語(yǔ)法規(guī)則通常不允許的字符。
SET QUOTED_IDENTIFIER { ON | OFF }
當(dāng) SET QUOTED_IDENTIFIER 為 ON 時(shí),標(biāo)識(shí)符可以由雙引號(hào)分隔,而文字必須由單引號(hào)分隔。當(dāng) SET QUOTED_IDENTIFIER 為 OFF 時(shí),標(biāo)識(shí)符不可加引號(hào),且必須遵守所有 Transact-SQL 標(biāo)識(shí)符規(guī)則。有關(guān)更多信息,請(qǐng)參見(jiàn)使用標(biāo)識(shí)符。文字可以由單引號(hào)或雙引號(hào)分隔。
當(dāng) SET QUOTED_IDENTIFIER 為 ON 時(shí),由雙引號(hào)分隔的所有字符串都被解釋為對(duì)象標(biāo)識(shí)符。因此,加引號(hào)的標(biāo)識(shí)符不必遵守 Transact-SQL 標(biāo)識(shí)符規(guī)則。它們可以是保留關(guān)鍵字,并且可以包含 Transact-SQL 標(biāo)識(shí)符中通常不允許的字符。不能使用雙引號(hào)分隔文字字符串表達(dá)式,而必須用單引號(hào)括住文字字符串。如果單引號(hào) (') 是文字字符串的一部分,則可以由兩個(gè)單引號(hào) ('') 表示。當(dāng)對(duì)數(shù)據(jù)庫(kù)中的對(duì)象名使用保留關(guān)鍵字時(shí),SET QUOTED_IDENTIFIER 必須為 ON。
當(dāng) SET QUOTED_IDENTIFIER 為 OFF(默認(rèn)值)時(shí),表達(dá)式中的文字字符串可以由單引號(hào)或雙引號(hào)分隔。如果文字字符串由雙引號(hào)分隔,則可以在字符串中包含嵌入式單引號(hào),如省略號(hào)。
當(dāng)在計(jì)算列或索引視圖上創(chuàng)建或操作索引時(shí),SET QUOTED_IDENTIFIER 必須為 ON。如果 SET QUOTED_IDENTIFIER 為 OFF,則計(jì)算列或索引視圖上帶索引的表上的 CREATE、UPDATE、INSERT 和 DELETE 語(yǔ)句將失敗。有關(guān)計(jì)算列上的索引視圖和索引所必需的 SET 選項(xiàng)設(shè)置的更多信息,請(qǐng)參見(jiàn) SET 中的"使用 SET 語(yǔ)句時(shí)的注意事項(xiàng)"。
在進(jìn)行連接時(shí),SQL Server ODBC 驅(qū)動(dòng)程序和用于 SQL Server 的 Microsoft OLE DB 提供程序自動(dòng)將 QUOTED_IDENTIFIER 設(shè)置為 ON。這可以在 ODBC 數(shù)據(jù)源、ODBC 連接特性或 OLE DB 連接屬性中進(jìn)行配置。對(duì)來(lái)自 DB-Library 應(yīng)用程序的連接,SET QUOTED_IDENTIFIER 設(shè)置默認(rèn)為 OFF。
當(dāng)創(chuàng)建存儲(chǔ)過(guò)程時(shí),將捕獲 SET QUOTED_IDENTIFIER 和 SET ANSI_NULLS 設(shè)置,用于該存儲(chǔ)過(guò)程的后續(xù)調(diào)用。
當(dāng)在存儲(chǔ)過(guò)程內(nèi)執(zhí)行 SET QUOTED_IDENTIFIER 時(shí),其設(shè)置不更改。
當(dāng) SET ANSI_DEFAULTS 為 ON時(shí),將啟用 SET QUOTED_IDENTIFIER。
SET QUOTED_IDENTIFIER 還與 sp_dboption 的 quoted identifier 設(shè)置相對(duì)應(yīng)。如果 SET QUOTED_IDENTIFIER 為 OFF,則 SQL Server 使用 sp_dboption 的 quoted identifier 設(shè)置。有關(guān)數(shù)據(jù)庫(kù)設(shè)置的更多信息,請(qǐng)參見(jiàn) sp_dboption 和設(shè)置數(shù)據(jù)庫(kù)選項(xiàng)。
SET QUOTED_IDENTIFIER 是在分析時(shí)進(jìn)行設(shè)置的。在分析時(shí)進(jìn)行設(shè)置意味著:SET 語(yǔ)句只要出現(xiàn)在批處理或存儲(chǔ)過(guò)程中即生效,與代碼執(zhí)行實(shí)際上是否到達(dá)該點(diǎn)無(wú)關(guān);并且 SET 語(yǔ)句在任何語(yǔ)句執(zhí)行之前生效。
SET QUOTED_IDENTIFIER 權(quán)限默認(rèn)授予所有用戶。
下例顯示 SET QUOTED_IDENTIFIER 設(shè)置必須為 ON,而且表名內(nèi)的關(guān)鍵字必須在雙引號(hào)內(nèi),才能創(chuàng)建和使用帶保留關(guān)鍵字的對(duì)象名。
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 時(shí),在字符串表達(dá)式中使用單引號(hào)和雙引號(hào)的方式。
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)文章