• <menu id="w2i4a"></menu>
  • logo SQL Prompt教程

    文檔首頁>>SQL Prompt教程>>SQL語法提示工具SQL Prompt使用教程:使用SQL Prompt快速刪除方括號

    SQL語法提示工具SQL Prompt使用教程:使用SQL Prompt快速刪除方括號


    SQL Prompt根據(jù)數(shù)據(jù)庫的對象名稱、語法和代碼片段自動進行檢索,為用戶提供合適的代碼選擇。自動腳本設(shè)置使代碼簡單易讀--當開發(fā)者不大熟悉腳本時尤其有用。SQL Prompt安裝即可使用,能大幅提高編碼效率。此外,用戶還可根據(jù)需要進行自定義,使之以預(yù)想的方式工作。

    點擊下載SQL Prompt正式版


    如果在標識符中避免使用非法字符和保留字,則幾乎不需要分隔符。遺憾的是,SSMS在生成構(gòu)建腳本時會不加選擇地使用方括號分隔符,以防萬一。本文提供了一個方便的功能,該功能僅在真正需要的地方添加帶引號的分隔符,然后坐下來,讓SQL Prompt快速刪除任何多余的方括號。

    對于某些人來說,“SQL Prompt”菜單中更令人困惑的選項之一是“刪除方括號”項。什么方括號,為什么要刪除它們?他們的目的是什么,為什么是方形?這些都是好問題。

    SQL語法提示工具SQL Prompt使用教程:使用SQL Prompt快速刪除方括號

    為什么要使用分隔符?

    標識符,即SQL Server元數(shù)據(jù)的名稱,例如對象、別名、列和索引,必須符合某些規(guī)則。如果沒有,則必須定界它們。
    SQL標準指定使用雙引號(“”)作為分隔符。SQL Server從Sybase繼承了出于相同目的而使用方括號([])的喜好,盡管雙引號也可以正常工作。分隔符不會成為標識符的一部分;它們僅用于標記其開始和結(jié)束,并且僅用于告知解析器您的意圖。

    您只需要很少分隔或“引用”標識符即可。SQL要求您分隔任何標識符,這些標識符是保留字,包含不允許的字符或以為特殊對象保留的符號開頭。

    SQL在標識符中僅允許某些字符。這些字符包括字母、十進制數(shù)字和一些符號。普通標識符必須以字母開頭,并且只能包含字母、下劃線字符(_)和數(shù)字。

    • 字母由Unicode標準3.2定義,并且包括從a到z,從A到Z的拉丁字符以及從當前歸類中得到的字母字符。
    • 數(shù)字表示當前排序規(guī)則中的十進制數(shù)
    • 允許的符號包括@(@),$(美元),#(數(shù)字)或_(下劃線)。

    分隔符為什么有問題?

    沒有經(jīng)驗的SQL Server開發(fā)人員會希望不必要地分隔標識符,并且會避免在名稱中同時使用非法字符和保留字。但是,當您通過SSMS獲取腳本時,SQL Server選擇分隔所有標識符,無論它是否確實需要它。萬一您使用的標識符將來可能成為保留字,它就會采用這種謹慎的方法。幾乎所有開發(fā)人員都希望在可能的情況下刪除它們,因為它們使SQL代碼難以閱讀。

    SQL Prompt提供了“刪除方括號”操作,以糾正SQL Server腳本編寫中的怪癖。

    誤使用帶分隔符的標識符

    如果您遵循對象命名規(guī)則,則幾乎不需要分隔符,并且代碼可能會更清晰。在下面的示例中,我允許我自己使用它們,只是為了指出您遇到麻煩或惡作劇的速度有多快。這段代碼可以編譯并運行而不會產(chǎn)生抱怨:

    SQL語法提示工具SQL Prompt使用教程:使用SQL Prompt快速刪除方括號

    說服自己可以運行,但不是要繼承的代碼,請嘗試使用“提示”的“刪除方括號”操作(從“SQL Prompt”菜單或“操作”列表中,或使用鍵盤快捷鍵Ctrl + B,Crtl+ B)。它不能刪除那些討厭的方括號嗎?如果確實如此,則該代碼將無法運行。

    但是,在SSMS中,將Person用腳本寫出來。來自AdventureWorks的Person表,您將很快獲得一個充滿不必要方括號的構(gòu)建腳本:

    SQL語法提示工具SQL Prompt使用教程:使用SQL Prompt快速刪除方括號

    這次,當您運行“刪除方括號”操作時,所有這些分隔符將消失,使其更加整潔并易于閱讀。

    引用版本如何?

    SQL語法提示工具SQL Prompt使用教程:使用SQL Prompt快速刪除方括號

    不,什么也沒有發(fā)生。SQL Prompt只對方括號感興趣,而不對分隔標識符感興趣。這很有用,因為這意味著您可以在真正需要的地方使用標準帶引號的標識符,然后使用“提示”清理SSMS產(chǎn)生的所有方括號標識符。

    為什么要擔心引用標識符?

    每當您生成需要獲取元數(shù)據(jù)的SQL例程時,就需要準備好分隔表、列、類型、索引和對象的名稱。我做了很多這樣的事情,我不得不使用一些混亂或錯誤的系統(tǒng)例程。結(jié)果與SSMS相同;您最終不得不分隔一切。

    提供了系統(tǒng)過程sp_validname來檢查標識符是否有效。不幸的是,它有一個“有效”的定義,這對我們來說毫無用處,因為它只會在標識符錯誤時才認為它是無效的,即使在分隔符也是如此。 僅當標識符為空、NULL或Unicode替換字符U + FFFF時,情況才會如此。 它甚至無法檢查U + FFFF。

    QuoteName()函數(shù)只是添加了方括號分隔符,如果字符串中已經(jīng)有一個封閉的方括號字符,則將其“轉(zhuǎn)義”。對此進行了簡單演示,如下所示:

    SQL語法提示工具SQL Prompt使用教程:使用SQL Prompt快速刪除方括號

    為了證明多余的右方括號只是“轉(zhuǎn)義”字符串中的方括號,我們可以嘗試使用此方括號表達式創(chuàng)建表:

    SQL語法提示工具SQL Prompt使用教程:使用SQL Prompt快速刪除方括號

    正常工作:

    SQL語法提示工具SQL Prompt使用教程:使用SQL Prompt快速刪除方括號

    我們甚至可以指定表名來刪除它:

    SQL語法提示工具SQL Prompt使用教程:使用SQL Prompt快速刪除方括號

    如果您要求SQL Prompt刪除方括號,則在上面的代碼中明智地將其保留。

    更好的'QuoteName',僅在必要時用于分隔標識符

    當然,分隔的答案是設(shè)計一種檢查標識符的方法,并且僅在必要時才對其進行分隔。 我想,我們應(yīng)該具有可憐的sp_validname功能。盡管可以很容易地通過一個過程來完成它,但我還是將其作為一個函數(shù)來完成。 它可以接受兩個參數(shù)@TheIdeintifier和@TheDelimiter,默認情況下,后者為雙引號,盡管您可以將其設(shè)置為任何有效的分隔符。

    當我直接從元數(shù)據(jù)創(chuàng)建腳本時可以使用它,然后可以執(zhí)行該腳本。您永遠無法確定從元數(shù)據(jù)視圖中獲得的名稱將是有效的,因此您需要進行相應(yīng)的檢查和補償。在您永遠看不到代碼的地方,那么值得用方括號“引用”所有內(nèi)容。畢竟,如果它從未被發(fā)現(xiàn)過,那不會有任何危害。但是,對于任何可見的事物,都值得承擔額外的麻煩。

    SQL語法提示工具SQL Prompt使用教程:使用SQL Prompt快速刪除方括號

    結(jié)論

    只要有可能,就應(yīng)該避免使用不是有效SQL的標識符。這樣,您可以避免任何誤解或歧義。在極少數(shù)情況下,您可能需要在標識符(通常是別名)中引入一些無效字符。您可能需要在列名中進行操作,或者最好在列名中使用別名,以確保在報表中可以理解它們。然后,您需要分隔它們。

    每當我們需要能夠輕松查看和理解SQL時,就需要刪除所有多余的不必要的分隔符。SQL Prompt具有出色的解決方案。通過為SSMS中的表生成腳本,然后運行“刪除方括號”操作,您將很快說服自己。從方括號的裝飾后面看到桌子的結(jié)構(gòu)是非常令人滿意的。

    本教程內(nèi)容到這里就結(jié)束了,感興趣的朋友請繼續(xù)關(guān)注我們網(wǎng)站哦~您也可以下載SQL Prompt試用版免費試用~

    想要購買SQL Prompt正版授權(quán),或了解更多產(chǎn)品信息請點擊【咨詢在線客服



    掃碼咨詢


    添加微信 立即咨詢

    電話咨詢

    客服熱線
    023-68661681

    TOP
    三级成人熟女影院,欧美午夜成人精品视频,亚洲国产成人乱色在线观看,色中色成人论坛 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();