SQL語(yǔ)法 分隔符理解小結(jié)
更新時(shí)間:2009年10月08日 19:04:51 作者:
單引號(hào)和雙引號(hào)之間的區(qū)別最早在SQL92標(biāo)準(zhǔn)中引入的。對(duì)于標(biāo)識(shí)符,這個(gè)標(biāo)準(zhǔn)區(qū)分了常規(guī)標(biāo)識(shí)符和分隔的標(biāo)識(shí)符。
兩者主要的區(qū)別在于:分隔的標(biāo)識(shí)符被括在雙引號(hào)中(Transact-SQL也支持方括號(hào)的使用:[標(biāo)識(shí)符])并且是區(qū)分大小寫的。單引號(hào)只用于字符串的定界??偟膩?lái)說(shuō),引入分隔的標(biāo)識(shí)符是為了對(duì)標(biāo)識(shí)符進(jìn)行規(guī)范,否則就會(huì)與保留字相同了。特別要提到的是,分隔的標(biāo)識(shí)符能夠使你在命名(標(biāo)識(shí)符或變量的名字)的時(shí)候,免于使用在將來(lái)的SQL標(biāo)準(zhǔn)中可能出現(xiàn)的保留字。另外,分隔的標(biāo)識(shí)符能夠包含一些在通常的標(biāo)識(shí)符名稱中被視為不合法的字符,如空格。
在SQL SERVER中,雙引號(hào)的使用由SET 語(yǔ)句中的QUOTED_IDENTIFIER選項(xiàng)來(lái)定義。如果這個(gè)選項(xiàng)被設(shè)為ON,則雙引號(hào)中的標(biāo)識(shí)符將被定義為一個(gè)分隔的標(biāo)識(shí)符。在這種情況下,雙引號(hào)不能被用于定界字符串?!?
記住以下幾句話就能把分隔符理解了
以上這段話是書上的原話,我對(duì)分隔的標(biāo)識(shí)符的理解是:例如"hu","h u",[hu],
[ h u]這幾個(gè)標(biāo)識(shí)符都是不同的,在使用時(shí)就像使用a,b等標(biāo)識(shí)符一樣,只不過(guò)必須加上雙引號(hào)或中括號(hào),不知這樣理解對(duì)不對(duì)。
我自己對(duì)分隔符的理解:分隔符就是為了起到分隔作用。 SELECT * FROM "My Table"
WHERE "Last Name" = 'O''Brien'
自我分析:SELECT,FROM,where是關(guān)鍵字。"My Table"就是標(biāo)志符,而””就是分隔符
請(qǐng)大蝦們指教。
其實(shí)你理解的挺對(duì)的
但是別忘了它的作用是為了定義標(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) (") 分隔開:
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) (`)
在SQL SERVER中,雙引號(hào)的使用由SET 語(yǔ)句中的QUOTED_IDENTIFIER選項(xiàng)來(lái)定義。如果這個(gè)選項(xiàng)被設(shè)為ON,則雙引號(hào)中的標(biāo)識(shí)符將被定義為一個(gè)分隔的標(biāo)識(shí)符。在這種情況下,雙引號(hào)不能被用于定界字符串?!?
記住以下幾句話就能把分隔符理解了
以上這段話是書上的原話,我對(duì)分隔的標(biāo)識(shí)符的理解是:例如"hu","h u",[hu],
[ h u]這幾個(gè)標(biāo)識(shí)符都是不同的,在使用時(shí)就像使用a,b等標(biāo)識(shí)符一樣,只不過(guò)必須加上雙引號(hào)或中括號(hào),不知這樣理解對(duì)不對(duì)。
我自己對(duì)分隔符的理解:分隔符就是為了起到分隔作用。 SELECT * FROM "My Table"
WHERE "Last Name" = 'O''Brien'
自我分析:SELECT,FROM,where是關(guān)鍵字。"My Table"就是標(biāo)志符,而””就是分隔符
請(qǐng)大蝦們指教。
其實(shí)你理解的挺對(duì)的
但是別忘了它的作用是為了定義標(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) (") 分隔開:
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) (`)
相關(guān)文章
解決SQL Server無(wú)法啟動(dòng)的小技巧
SQLServer無(wú)法正確啟動(dòng)是由于Executive服務(wù)無(wú)法登錄引起的,下面就教您一個(gè)處理SQL Server無(wú)法啟動(dòng)的方法,需要的朋友可以參考下2015-08-08完美解決SQL server2005中插入漢字變成問(wèn)號(hào)的問(wèn)題
以下是對(duì)在SQL server2005中插入漢字變成問(wèn)號(hào)的解決辦法進(jìn)行了分析介紹。需要的朋友可以過(guò)來(lái)參考下2013-08-08SQL SERVER 2012新增函數(shù)之邏輯函數(shù)CHOOSE詳解
這篇文章主要介紹了SQL SERVER 2012新增函數(shù)之邏輯函數(shù)CHOOSE的相關(guān)資料,文中介紹的很詳細(xì),相信對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-03-03SQL Server誤區(qū)30日談 第27天 使用BACKUP WITH CHECKSUM可以替代DBCC CheckDB
乍一看,由于BACKUP WITH CHECKSUM會(huì)檢測(cè)所有分配出去的頁(yè)的校驗(yàn)和的值,這個(gè)誤區(qū)貌似是這么回事,但實(shí)際上并不是這么回事2013-01-01MSSQL轉(zhuǎn)MYSQL,gb2312轉(zhuǎn)utf-8無(wú)亂碼解決方法
MSSQL轉(zhuǎn)MYSQL,gb2312轉(zhuǎn)utf-8無(wú)亂碼解決方法,需要的朋友可以參考下。2010-06-06SQL Server如何通過(guò)SQL語(yǔ)句直接操作另一臺(tái)服務(wù)器上的SQL SERVER的數(shù)據(jù)
這篇文章主要介紹了SQL Server如何通過(guò)SQL語(yǔ)句直接操作另一臺(tái)服務(wù)器上的SQL SERVER的數(shù)據(jù),需要的朋友可以參考下2022-10-10