為什么在存儲(chǔ)過(guò)程中要使用SET QUOTED_IDENTIFIER ON?
在數(shù)據(jù)庫(kù)中新建存儲(chǔ)過(guò)程的時(shí)候,默認(rèn)都會(huì)有一個(gè)"SET QUOTED_IDENTIFIER ON"語(yǔ)句在前面。那么,這句話到底是什么意思呢?QUOTED_IDENTIFIER ON與SET QUOTED
在數(shù)據(jù)庫(kù)中新建存儲(chǔ)過(guò)程的時(shí)候,默認(rèn)都會(huì)有一個(gè)"SET QUOTED_IDENTIFIER ON"語(yǔ)句在前面。那么,這句話到底是什么意思呢?QUOTED_IDENTIFIER ON與SET QUOTED_IDENTIFIER OFF的區(qū)別在哪里呢?
QUOTED_IDENTIFIER ON與SET QUOTED_IDENTIFIER OFF的作用
1. 創(chuàng)建存儲(chǔ)過(guò)程的默認(rèn)行為
通過(guò)SQL Server數(shù)據(jù)庫(kù)管理工具創(chuàng)建的存儲(chǔ)過(guò)程,在代碼的最前面會(huì)默認(rèn)加上"SET QUOTED_IDENTIFIER ON"語(yǔ)句。這個(gè)語(yǔ)句用于設(shè)置當(dāng)前會(huì)話的QUOTED_IDENTIFIER選項(xiàng)。
2. 區(qū)分關(guān)鍵字和字符串
SET QUOTED_IDENTIFIER ON的作用是讓系統(tǒng)關(guān)鍵字和普通字符串之間能夠正確地進(jìn)行區(qū)分。當(dāng)該選項(xiàng)打開(kāi)時(shí),系統(tǒng)將把被雙引號(hào)("")包圍的內(nèi)容識(shí)別為普通字符串,而不是關(guān)鍵字。
3. 避免語(yǔ)法錯(cuò)誤
開(kāi)啟SET QUOTED_IDENTIFIER ON后,如果在SQL語(yǔ)句中存在與系統(tǒng)關(guān)鍵字重復(fù)的字符串,可以使用雙引號(hào)將其括起來(lái),以避免語(yǔ)法錯(cuò)誤的發(fā)生。否則,系統(tǒng)會(huì)認(rèn)為該字符串是關(guān)鍵字,并報(bào)錯(cuò)。
演示SET QUOTED_IDENTIFIER ON的作用
以下是演示SET QUOTED_IDENTIFIER ON作用的步驟:
1. SQL Server Management Studio中創(chuàng)建查詢(xún)窗口
在SQL Server Management Studio管理工具中點(diǎn)擊【新建查詢(xún)】,創(chuàng)建一個(gè)新的SQL語(yǔ)句書(shū)寫(xiě)窗口,后續(xù)的所有SQL語(yǔ)句都在這個(gè)新的窗口中演示。
2. 開(kāi)啟SET QUOTED_IDENTIFIER ON
輸入"SET QUOTED_IDENTIFIER ON",然后嘗試創(chuàng)建一個(gè)表名為"distinct"的表。在寫(xiě)完SQL語(yǔ)句后,可以看到"distinct"下面有一道紅色的波浪線,表示存在語(yǔ)法錯(cuò)誤。
3. 檢查SQL語(yǔ)法是否正確
點(diǎn)擊上方菜單欄的勾勾圖標(biāo),檢查當(dāng)前窗口中的SQL語(yǔ)法是否正確。檢測(cè)結(jié)果顯示,開(kāi)啟SET QUOTED_IDENTIFIER ON時(shí),"distinct"與系統(tǒng)關(guān)鍵字重復(fù),所以不能通過(guò)檢查。
4. 使用雙引號(hào)解決關(guān)鍵字重復(fù)問(wèn)題
假設(shè)開(kāi)啟SET QUOTED_IDENTIFIER ON,并且必須創(chuàng)建名為"distinct"的表,可以使用雙引號(hào)將"distinct"括起來(lái)。在執(zhí)行按鈕后,就可以看到該表成功創(chuàng)建。
5. 關(guān)閉SET QUOTED_IDENTIFIER OFF
關(guān)閉SET QUOTED_IDENTIFIER OFF后,即使"distinct"被雙引號(hào)括起來(lái),仍然會(huì)報(bào)語(yǔ)法錯(cuò)誤。SQL語(yǔ)句不會(huì)得到執(zhí)行。
6. 關(guān)閉SET QUOTED_IDENTIFIER OFF并去除雙引號(hào)
關(guān)閉SET QUOTED_IDENTIFIER OFF后,如果去掉"distinct"的雙引號(hào),仍然會(huì)報(bào)語(yǔ)法錯(cuò)誤。SQL語(yǔ)句還是不會(huì)得到執(zhí)行。
總結(jié)
1. SET QUOTED_IDENTIFIER ON:與系統(tǒng)關(guān)鍵字重復(fù)的字符串,允許使用雙引號(hào)括起來(lái),就能正常使用。注意要使用雙引號(hào)。
2. SET QUOTED_IDENTIFIER OFF:與系統(tǒng)關(guān)鍵字重復(fù)的字符串,不允許使用雙引號(hào)括起來(lái)。應(yīng)避免使用與關(guān)鍵字重復(fù)的字符串,以避免語(yǔ)法錯(cuò)誤。