关于 SET QUOTED_IDENTIFIER ON 和 SET ANSI_NULLS ON
這些是 SQL-92 設(shè)置語(yǔ)句,使 SQL Server 2000/2005 遵從 SQL-92 規(guī)則。
當(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ī)則。
SQL-92 標(biāo)準(zhǔn)要求在對(duì)空值進(jìn)行等于 (=) 或不等于 (<>) 比較時(shí)取值為 FALSE。當(dāng) SET ANSI_NULLS 為 ON 時(shí),即使 column_name 中包含空值,使用 WHERE column_name = NULL 的 SELECT 語(yǔ)句仍返回零行。即使 column_name 中包含非空值,使用 WHERE column_name <> NULL 的 SELECT 語(yǔ)句仍會(huì)返回零行。
當(dāng) SET ANSI_NULLS 為 OFF 時(shí),等于 (=) 和不等于 (<>) 比較運(yùn)算符不遵從 SQL-92 標(biāo)準(zhǔn)。使用 WHERE column_name = NULL 的 SELECT 語(yǔ)句返回 column_name 中包含空值的行。使用 WHERE column_name <> NULL 的 SELECT 語(yǔ)句返回列中包含非空值的行。此外,使用 WHERE column_name <> XYZ_value 的 SELECT 語(yǔ)句返回所有不為 XYZ_value 也不為 NULL 的行。
?
? QUOTED_IDENTIFIER 的作用是為了定義標(biāo)識(shí)符 ?
? 符合所有標(biāo)識(shí)符格式規(guī)則的標(biāo)識(shí)符可以使用分隔符,也可以不使用分隔符。 ?
? 不符合標(biāo)識(shí)符格式規(guī)則的標(biāo)識(shí)符必須使用分隔符。 ?
? ?
? 分隔標(biāo)識(shí)符在下列情況下使用: ? ?
? ?
? 當(dāng)在對(duì)象名稱或?qū)ο竺Q的組成部分中使用保留字時(shí)。 ? ?
? 推薦不要使用保留關(guān)鍵字作為對(duì)象名稱。從 ? Microsoft® ? SQL ? Server? ? 早期版本升級(jí)的數(shù)據(jù)庫(kù)可能含有標(biāo)識(shí)符,這些標(biāo)識(shí)符包括早期版本中未保留而在 ? SQL ? Server ? 2000 ? 中保留的字。可用分隔標(biāo)識(shí)符引用對(duì)象直到可改變其名稱。 ?
? ?
? 當(dāng)使用未被列為合法標(biāo)識(shí)符的字符時(shí)。 ? ?
? SQL ? Server ? 允許在分隔標(biāo)識(shí)符中使用當(dāng)前代碼頁(yè)中的任何字符。但是,不加選擇地在對(duì)象名稱中使用特殊字符將使 ? SQL ? 語(yǔ)句和腳本難以閱讀和維護(hù)。 ?
? ?
? Transact-SQL ? 所使用的分隔符類型: ?
? ?
? ?
? ?
? 說(shuō)明 ? ? 分隔符僅用于標(biāo)識(shí)符。分隔符不能用于關(guān)鍵字,不論它們?cè)?? SQL ? Server ? 中是否被標(biāo)記為保留字。 ?
? ?
? 被引用的標(biāo)識(shí)符用雙引號(hào) ? (") ? 分隔開(kāi): ? ?
? SELECT ? * ? FROM ? "Blanks ? in ? Table ? Name" ?
? ?
? 括在括號(hào)中的標(biāo)識(shí)符用方括號(hào) ? ([ ? ]) ? 分隔: ? ?
? SELECT ? * ? FROM ? [Blanks ? In ? Table ? Name] ?
? ?
? 僅當(dāng) ? QUOTED_IDENTIFIER ? 選項(xiàng)設(shè)置為 ? ON ? 時(shí),被引用的標(biāo)識(shí)符才有效。默認(rèn)情況下,當(dāng)用于 ? SQL ? Server ? 的 ? Microsoft ? OLE ? DB ? 提供程序和 ? SQL ? Server ? ODBC ? 驅(qū)動(dòng)程序連接時(shí),將 ? QUOTED_IDENTIFIER ? 設(shè)置為 ? ON。默認(rèn)情況下,DB-Library ? 不將 ? QUOTED_IDENTIFIER ? 設(shè)置為 ? ON。不管使用何種接口,個(gè)別應(yīng)用程序或用戶可隨時(shí)更改設(shè)置。SQL ? Server ? 提供了多種方法來(lái)指定該選項(xiàng)。例如,在 ? SQL ? Server ? 企業(yè)管理器和 ? SQL ? 查詢分析器中,該選項(xiàng)可在對(duì)話中設(shè)置。在 ? Transact-SQL ? 中,可以使用 ? SET ? QUOTED_IDENTIFIER、sp_dboption ? 的 ? quoted ? identifier ? 選項(xiàng)或 ? sp_configure ? 的 ? user ? options ? 選項(xiàng)將此選項(xiàng)設(shè)為多種級(jí)別。 ?
? ?
? 當(dāng) ? QUOTED_IDENTIFIER ? 為 ? ON ? 時(shí),對(duì)于 ? SQL ? 語(yǔ)句中的雙引號(hào)和單引號(hào) ? (') ? 的使用,SQL ? Server ? 遵循 ? SQL-92 ? 規(guī)則: ? ?
? ?
? 雙引號(hào)只能用于分隔標(biāo)識(shí)符,不能用于分隔字符串。 ? ?
? 為保持與現(xiàn)有應(yīng)用程序的兼容性,SQL ? Server ? 并不完全強(qiáng)制該規(guī)則。如果字符串沒(méi)有超過(guò)標(biāo)識(shí)符的長(zhǎng)度,則該字符串可包含在雙引號(hào)內(nèi)。但不建議這樣做。 ?
? ?
? 單引號(hào)必須用來(lái)包含字符串,不能用于分隔標(biāo)識(shí)符。 ? ?
? 如果字符串包含單引號(hào),則需要在單引號(hào)前再增加一個(gè)單引號(hào): ?
? ?
? SELECT ? * ? FROM ? "My ? Table" ?
? WHERE ? "Last ? Name" ? = ? 'O''Brien' ?
? ?
? 當(dāng) ? QUOTED_IDENTIFIER ? 為 ? OFF ? 時(shí),對(duì)于雙引號(hào)和單引號(hào)的使用,SQL ? Server ? 遵循如下規(guī)則: ? ?
? ?
? 引號(hào)不能用于分隔標(biāo)識(shí)符,而是用括號(hào)作為分隔符。 ?
? ?
? ?
? 單引號(hào)或雙引號(hào)可用于包含字符串。 ? ?
? 如果使用雙引號(hào),嵌入的單引號(hào)不需要用兩個(gè)單引號(hào)來(lái)表示: ?
? ?
? SELECT ? * ? FROM ? [My ? Table] ?
? WHERE ? [Last ? Name] ? = ? "O'Brien" ?
? ?
? 無(wú)論 ? QUOTED_IDENTIFIER ? 的設(shè)置如何,都可以在括號(hào)中使用分隔符。 ?
? ?
? 分隔標(biāo)識(shí)符規(guī)則 ?
? 分隔標(biāo)識(shí)符的格式規(guī)則是: ? ?
? ?
? 分隔標(biāo)識(shí)符可以包含與常規(guī)標(biāo)識(shí)符相同的字符數(shù)(1 ? 到 ? 128 ? 個(gè),不包括分隔符字符)。本地臨時(shí)表標(biāo)識(shí)符最多可以包含 ? 116 ? 個(gè)字符。 ?
? ?
? ?
? 標(biāo)識(shí)符的主體可以包含當(dāng)前代碼頁(yè)內(nèi)字母(分隔符本身除外)的任意組合。例如,分隔符標(biāo)識(shí)符可以包含空格、對(duì)常規(guī)標(biāo)識(shí)符有效的任何字符以及下列任何字符: ? 代字號(hào) ? (~) ? 連字符 ? (-) ? ?
? 驚嘆號(hào) ? (!) ? 左括號(hào) ? ({) ? ?
? 百分號(hào) ? (%) ? 右括號(hào) ? (}) ? ?
? 插入號(hào) ? (^) ? 撇號(hào) ? (') ? ?
? and ? 號(hào) ? (&) ? 句號(hào) ? (.) ? ?
? 左圓括號(hào) ? (() ? 反斜杠 ? (\) ? ?
? 右圓括號(hào) ? ()) ? 重音符號(hào) ? (`)??
轉(zhuǎn)載于:https://blog.51cto.com/aduzf/559698
新人創(chuàng)作打卡挑戰(zhàn)賽發(fā)博客就能抽獎(jiǎng)!定制產(chǎn)品紅包拿不停!總結(jié)
以上是生活随笔為你收集整理的关于 SET QUOTED_IDENTIFIER ON 和 SET ANSI_NULLS ON的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 微软鲍尔默:IE9浏览器将会在3月发布
- 下一篇: 浅谈IT管理(转)