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