翻譯|使用教程|編輯:莫成敏|2020-01-08 09:39:18.970|閱讀 984 次
概述:本文提供了一個(gè)方便的功能,該功能僅在真正需要的地方添加帶引號(hào)的分隔符,然后坐下來(lái),讓SQL Prompt快速刪除任何多余的方括號(hào)。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
SQL Prompt根據(jù)數(shù)據(jù)庫(kù)的對(duì)象名稱、語(yǔ)法和代碼片段自動(dòng)進(jìn)行檢索,為用戶提供合適的代碼選擇。自動(dòng)腳本設(shè)置使代碼簡(jiǎn)單易讀--當(dāng)開(kāi)發(fā)者不大熟悉腳本時(shí)尤其有用。SQL Prompt安裝即可使用,能大幅提高編碼效率。此外,用戶還可根據(jù)需要進(jìn)行自定義,使之以預(yù)想的方式工作。
如果在標(biāo)識(shí)符中避免使用非法字符和保留字,則幾乎不需要分隔符。遺憾的是,SSMS在生成構(gòu)建腳本時(shí)會(huì)不加選擇地使用方括號(hào)分隔符,以防萬(wàn)一。本文提供了一個(gè)方便的功能,該功能僅在真正需要的地方添加帶引號(hào)的分隔符,然后坐下來(lái),讓SQL Prompt快速刪除任何多余的方括號(hào)。
對(duì)于某些人來(lái)說(shuō),“SQL Prompt”菜單中更令人困惑的選項(xiàng)之一是“刪除方括號(hào)”項(xiàng)。什么方括號(hào),為什么要?jiǎng)h除它們?他們的目的是什么,為什么是方形?這些都是好問(wèn)題。
為什么要使用分隔符?
標(biāo)識(shí)符,即SQL Server元數(shù)據(jù)的名稱,例如對(duì)象、別名、列和索引,必須符合某些規(guī)則。如果沒(méi)有,則必須定界它們。您只需要很少分隔或“引用”標(biāo)識(shí)符即可。SQL要求您分隔任何標(biāo)識(shí)符,這些標(biāo)識(shí)符是保留字,包含不允許的字符或以為特殊對(duì)象保留的符號(hào)開(kāi)頭。
SQL在標(biāo)識(shí)符中僅允許某些字符。這些字符包括字母、十進(jìn)制數(shù)字和一些符號(hào)。普通標(biāo)識(shí)符必須以字母開(kāi)頭,并且只能包含字母、下劃線字符(_)和數(shù)字。
分隔符為什么有問(wèn)題?
沒(méi)有經(jīng)驗(yàn)的SQL Server開(kāi)發(fā)人員會(huì)希望不必要地分隔標(biāo)識(shí)符,并且會(huì)避免在名稱中同時(shí)使用非法字符和保留字。但是,當(dāng)您通過(guò)SSMS獲取腳本時(shí),SQL Server選擇分隔所有標(biāo)識(shí)符,無(wú)論它是否確實(shí)需要它。萬(wàn)一您使用的標(biāo)識(shí)符將來(lái)可能成為保留字,它就會(huì)采用這種謹(jǐn)慎的方法。幾乎所有開(kāi)發(fā)人員都希望在可能的情況下刪除它們,因?yàn)樗鼈兪筍QL代碼難以閱讀。SQL Prompt提供了“刪除方括號(hào)”操作,以糾正SQL Server腳本編寫中的怪癖。
誤使用帶分隔符的標(biāo)識(shí)符
如果您遵循對(duì)象命名規(guī)則,則幾乎不需要分隔符,并且代碼可能會(huì)更清晰。在下面的示例中,我允許我自己使用它們,只是為了指出您遇到麻煩或惡作劇的速度有多快。這段代碼可以編譯并運(yùn)行而不會(huì)產(chǎn)生抱怨:
說(shuō)服自己可以運(yùn)行,但不是要繼承的代碼,請(qǐng)嘗試使用“提示”的“刪除方括號(hào)”操作(從“SQL Prompt”菜單或“操作”列表中,或使用鍵盤快捷鍵Ctrl + B,Crtl+ B)。它不能刪除那些討厭的方括號(hào)嗎?如果確實(shí)如此,則該代碼將無(wú)法運(yùn)行。
但是,在SSMS中,將Person用腳本寫出來(lái)。來(lái)自AdventureWorks的Person表,您將很快獲得一個(gè)充滿不必要方括號(hào)的構(gòu)建腳本:
這次,當(dāng)您運(yùn)行“刪除方括號(hào)”操作時(shí),所有這些分隔符將消失,使其更加整潔并易于閱讀。
引用版本如何?
不,什么也沒(méi)有發(fā)生。SQL Prompt只對(duì)方括號(hào)感興趣,而不對(duì)分隔標(biāo)識(shí)符感興趣。這很有用,因?yàn)檫@意味著您可以在真正需要的地方使用標(biāo)準(zhǔn)帶引號(hào)的標(biāo)識(shí)符,然后使用“提示”清理SSMS產(chǎn)生的所有方括號(hào)標(biāo)識(shí)符。
為什么要擔(dān)心引用標(biāo)識(shí)符?
每當(dāng)您生成需要獲取元數(shù)據(jù)的SQL例程時(shí),就需要準(zhǔn)備好分隔表、列、類型、索引和對(duì)象的名稱。我做了很多這樣的事情,我不得不使用一些混亂或錯(cuò)誤的系統(tǒng)例程。結(jié)果與SSMS相同;您最終不得不分隔一切。提供了系統(tǒng)過(guò)程sp_validname來(lái)檢查標(biāo)識(shí)符是否有效。不幸的是,它有一個(gè)“有效”的定義,這對(duì)我們來(lái)說(shuō)毫無(wú)用處,因?yàn)樗粫?huì)在標(biāo)識(shí)符錯(cuò)誤時(shí)才認(rèn)為它是無(wú)效的,即使在分隔符也是如此。 僅當(dāng)標(biāo)識(shí)符為空、NULL或Unicode替換字符U + FFFF時(shí),情況才會(huì)如此。 它甚至無(wú)法檢查U + FFFF。
QuoteName()函數(shù)只是添加了方括號(hào)分隔符,如果字符串中已經(jīng)有一個(gè)封閉的方括號(hào)字符,則將其“轉(zhuǎn)義”。對(duì)此進(jìn)行了簡(jiǎn)單演示,如下所示:
為了證明多余的右方括號(hào)只是“轉(zhuǎn)義”字符串中的方括號(hào),我們可以嘗試使用此方括號(hào)表達(dá)式創(chuàng)建表:
正常工作:
我們甚至可以指定表名來(lái)刪除它:
如果您要求SQL Prompt刪除方括號(hào),則在上面的代碼中明智地將其保留。
更好的'QuoteName',僅在必要時(shí)用于分隔標(biāo)識(shí)符當(dāng)然,分隔的答案是設(shè)計(jì)一種檢查標(biāo)識(shí)符的方法,并且僅在必要時(shí)才對(duì)其進(jìn)行分隔。 我想,我們應(yīng)該具有可憐的sp_validname功能。盡管可以很容易地通過(guò)一個(gè)過(guò)程來(lái)完成它,但我還是將其作為一個(gè)函數(shù)來(lái)完成。 它可以接受兩個(gè)參數(shù)@TheIdeintifier和@TheDelimiter,默認(rèn)情況下,后者為雙引號(hào),盡管您可以將其設(shè)置為任何有效的分隔符。
當(dāng)我直接從元數(shù)據(jù)創(chuàng)建腳本時(shí)可以使用它,然后可以執(zhí)行該腳本。您永遠(yuǎn)無(wú)法確定從元數(shù)據(jù)視圖中獲得的名稱將是有效的,因此您需要進(jìn)行相應(yīng)的檢查和補(bǔ)償。在您永遠(yuǎn)看不到代碼的地方,那么值得用方括號(hào)“引用”所有內(nèi)容。畢竟,如果它從未被發(fā)現(xiàn)過(guò),那不會(huì)有任何危害。但是,對(duì)于任何可見(jiàn)的事物,都值得承擔(dān)額外的麻煩。
結(jié)論
只要有可能,就應(yīng)該避免使用不是有效SQL的標(biāo)識(shí)符。這樣,您可以避免任何誤解或歧義。在極少數(shù)情況下,您可能需要在標(biāo)識(shí)符(通常是別名)中引入一些無(wú)效字符。您可能需要在列名中進(jìn)行操作,或者最好在列名中使用別名,以確保在報(bào)表中可以理解它們。然后,您需要分隔它們。
每當(dāng)我們需要能夠輕松查看和理解SQL時(shí),就需要?jiǎng)h除所有多余的不必要的分隔符。SQL Prompt具有出色的解決方案。通過(guò)為SSMS中的表生成腳本,然后運(yùn)行“刪除方括號(hào)”操作,您將很快說(shuō)服自己。從方括號(hào)的裝飾后面看到桌子的結(jié)構(gòu)是非常令人滿意的。
本教程內(nèi)容到這里就結(jié)束了,感興趣的朋友請(qǐng)繼續(xù)關(guān)注我們網(wǎng)站哦~您也可以下載SQL Prompt試用版免費(fèi)試用~想要購(gòu)買SQL Prompt正版授權(quán),或了解更多產(chǎn)品信息請(qǐng)點(diǎn)擊
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自: