翻譯|使用教程|編輯:楊鵬連|2021-01-21 10:29:37.567|閱讀 289 次
概述:SQL Prompt可以幫助防止在數(shù)據(jù)庫代碼中積累技術(shù)債務(wù)。它會立即向團(tuán)隊(duì)發(fā)出警報(bào),警告可能無法阻止您的代碼按預(yù)期工作的問題,但最終可能導(dǎo)致性能,維護(hù)或安全性問題。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
SQL Prompt是一款實(shí)用的SQL語法提示工具。SQL Prompt根據(jù)數(shù)據(jù)庫的對象名稱、語法和代碼片段自動進(jìn)行檢索,為用戶提供合適的代碼選擇。自動腳本設(shè)置使代碼簡單易讀--當(dāng)開發(fā)者不大熟悉腳本時尤其有用。SQL Prompt安裝即可使用,能大幅提高編碼效率。此外,用戶還可根據(jù)需要進(jìn)行自定義,使之以預(yù)想的方式工作。
SQL Prompt的代碼分析功能可幫助您在鍵入時發(fā)現(xiàn)代碼問題和代碼開發(fā)過程中的隱患。它還提供了改進(jìn)代碼的技巧,并提供了指向文檔的鏈接,這些文檔提供了有關(guān)每個受支持規(guī)則的建議,因此您可以決定最佳的操作方案。安裝或升級到SQL Prompt 9后,您將看到兩個新菜單項(xiàng):啟用代碼分析和管理代碼分析規(guī)則。確保已選中“啟用代碼分析”。
當(dāng)您打開現(xiàn)有查詢或開始在新窗口中鍵入內(nèi)容時,代碼分析功能將開始發(fā)揮作用。它將在后臺解析您的代碼,并根據(jù)一組內(nèi)置規(guī)則檢查SQL語法。這些規(guī)則旨在捕獲可能導(dǎo)致代碼失敗或執(zhí)行不正確的即時問題,消除潛在的性能問題,突出顯示不贊成或過時的語法并鼓勵最佳編碼實(shí)踐。代碼問題和改進(jìn)建議在問題編輯器中以綠色波浪線顯示在查詢編輯器中。
如果單擊“管理代碼分析規(guī)則”,您將看到SQL Prompt當(dāng)前支持的各種不同類型的規(guī)則。您還可以在其中控制要啟用或禁用的規(guī)則。
當(dāng)前,所有規(guī)則都是全局的,但是我希望后續(xù)版本允許更精細(xì)的控制。例如,開發(fā)人員可能希望針對每個服務(wù)器或數(shù)據(jù)庫配置規(guī)則,就像您對其他“提示”功能(如“標(biāo)簽顏色”)所做的一樣。他們可能還希望能夠建立和在多組規(guī)則之間進(jìn)行切換,這取決于他們當(dāng)前正在從事的項(xiàng)目,其使用方式類似于在多種代碼格式樣式之間使用和交換。
打破規(guī)則…
通過打破一些規(guī)則,讓我們看看SQL Prompt的代碼分析功能的實(shí)際作用。這是我們的原始查詢:
USE WideWorldImportersDW; GO SELECT TOP 10 City, SUM(Profit) FROM Dimension.City c, Fact.Sale WHERE [Latest Recorded Population] !=0 AND City.[City Key] = Sale.[City Key] GROUP BY City ORDER BY SUM(Profit) DESC;在SSSM中打開腳本時,可以看到SQL Prompt突出顯示了一些問題!哦,男孩,看看那些綠色的,彎曲的線條。不要在家嘗試此查詢!
讓我們看看如何使用代碼分析來改進(jìn)代碼。將鼠標(biāo)懸停在上TOP 10,我們看到此代碼使用舊式TOP子句:
當(dāng)我們單擊時TOP 10,代碼將突出顯示為綠色,并出現(xiàn)帶有燈泡的藍(lán)色圖標(biāo)。代碼以綠色突出顯示時,我們可以單擊燈泡圖標(biāo)或按Ctrl以查看詳細(xì)信息。
彈出“問題詳細(xì)信息”窗口,告訴我們有關(guān)該問題的更多信息,我們可以轉(zhuǎn)到在線文檔以獲取更多信息,也可以選擇禁用該規(guī)則。
如果我們選擇從“問題詳細(xì)信息”窗口中禁用規(guī)則,則會顯示一個紅色的禁用圖標(biāo),綠色的波浪線消失。
該問題的詳細(xì)信息提供的建議:“列名應(yīng)該是合格的,其表名,如果它是一個連接的一部分或者是子查詢。即使當(dāng)前是明確的,在某些時候也可能會做出更改,從而導(dǎo)致錯誤。”
為了解決這個問題,我們首先給表命名。然后,我們節(jié)省了一些時間,并使用SQL Prompt的內(nèi)置“合格對象名稱”(Ctrl + B,Ctrl + Q )功能,而不是手動限定對象名稱。我們正在進(jìn)步!我們的查詢只剩下兩個問題。第一個問題是我們使用的是老式的連接語法。
與嚴(yán)格的規(guī)則相比,與其他類別相比,風(fēng)格規(guī)則聽起來更像是個人喜好。但是,破壞良好的樣式慣例可能會帶來比您想象的更多的麻煩,因?yàn)檫@通常會使您的代碼更難于他人閱讀和理解,并且有時還更容易引入錯誤。
盡管仍然支持舊式內(nèi)部聯(lián)接,但它們沒有提供比ANSI標(biāo)準(zhǔn)JOIN語法更好的優(yōu)勢。此外,如果WHERE在更改其他子句時不小心刪除或注釋了該子句怎么辦?查詢?nèi)詫⒂淇斓貓?zhí)行,但是您現(xiàn)在有了交叉聯(lián)接,而不是預(yù)期的內(nèi)部聯(lián)接,這可能會導(dǎo)致錯誤的結(jié)果。為了解決這個問題,我們重寫查詢以使用ANSI標(biāo)準(zhǔn)JOIN語法。使用顯式聯(lián)接而不是舊式聯(lián)接的一個有益的副作用是,SQL Prompt可以O(shè)N為我們建議并插入該子句。
最后,代碼分析告訴我們!=應(yīng)該用<>運(yùn)算符替換運(yùn)算符。
現(xiàn)在,我們選擇禁用某些規(guī)則,并更改查詢以遵循其他規(guī)則和最佳樣式慣例。最后一步可能是使用SQL Prompt的Format SQL(Ctrl + K,Ctrl + Y )功能來堅(jiān)持格式樣式。最終查詢?nèi)缦滤荆?
SELECT TOP 10 c.City, SUM(s.Profit) FROM Dimension.City c INNER JOIN Fact.Sale s ON s.[City Key] = c.[City Key] WHERE c.[Latest Recorded Population] <> 0 GROUP BY c.City ORDER BY SUM(s.Profit) DESC;通過研究代碼分析建議,我們現(xiàn)在已經(jīng)知道(或被提醒)應(yīng)該在TOP子句,合格的對象名稱,顯式聯(lián)接和ANSI樣式運(yùn)算符中使用推薦的括號。
我的代碼違反了一些規(guī)則,我該怎么辦?
第一個開始是“代碼分析”文檔,您將在“問題詳細(xì)信息”窗口中看到該文檔。對于某些規(guī)則,記錄下來的規(guī)則描述應(yīng)該足以讓您了解如何修復(fù)代碼。
但是,對于其他規(guī)則,在決定采取正確的措施之前,您可能需要更多的指導(dǎo)并進(jìn)行一些研究。Redgate正在構(gòu)建為每個規(guī)則提供的信息,并且您可以期望看到開發(fā)的文章庫,它們提供了有關(guān)如何處理這些問題的更實(shí)用建議。如果不確定,請遵循《Transact-SQL參考》中Microsoft的建議。
概要SQL Prompt 9啟動時包含60多個代碼分析規(guī)則,這些規(guī)則檢查代碼中的最佳做法,不推薦使用的功能,對性能的影響,舊樣式等。這只是該功能的第一個版本。隨著它的發(fā)展,我個人希望能夠?qū)γ總€服務(wù)器和數(shù)據(jù)庫啟用/禁用規(guī)則,根據(jù)我正在從事的項(xiàng)目在規(guī)則集之間進(jìn)行切換,并最終根據(jù)建議自動修復(fù)代碼中的問題。
但是,SQL Prompt的代碼分析功能已經(jīng)幫助我確定了代碼中的幾個問題和潛在的改進(jìn),并提醒我也更改了某些SQL Prompt代碼片段中的代碼。我知道這是一個偉大的功能,它將幫助團(tuán)隊(duì)防止在其代碼庫中積累技術(shù)債務(wù)。
當(dāng)然,永遠(yuǎn)不要單靠工具。工具可以為您提供幫助,但始終確保您了解工具為何提出某些建議。將該工具用作提醒,然后從中學(xué)習(xí)成為更好的SQL開發(fā)人員??
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自: