SQL語(yǔ)法提示工具SQL Prompt教程:使用SQL Prompt重構(gòu)批處理或?qū)ο螅ㄏ拢?/h1>
SQL Prompt是一款實(shí)用的SQL語(yǔ)法提示工具。SQL Prompt根據(jù)數(shù)據(jù)庫(kù)的對(duì)象名稱、語(yǔ)法和代碼片段自動(dòng)進(jìn)行檢索,為用戶提供合適的代碼選擇。自動(dòng)腳本設(shè)置使代碼簡(jiǎn)單易讀——當(dāng)開發(fā)者不大熟悉腳本時(shí)尤其有用。SQL Prompt安裝即可使用,能大幅提高編碼效率。
本教程演示了SQL Prompt如何幫助“小規(guī)模” SQL重構(gòu)任務(wù),該任務(wù)的范圍通常僅限于您在本地工作的單批代碼或代碼對(duì)象。這些任務(wù)直接在SSMS查詢窗口中執(zhí)行,并且可以幫助您以各種方式重構(gòu)代碼,這些方式在測(cè)試存儲(chǔ)過程和對(duì)存儲(chǔ)過程進(jìn)行故障排除時(shí)非常有用。本文主要是教程后半部分,內(nèi)容緊接上文~
使用代碼片段進(jìn)行重構(gòu)
SQL Prompt的許多內(nèi)置代碼片段都包含$ SELECTEDTEXT $占位符。如果您在查詢窗口中突出顯示任何代碼并調(diào)用這些代碼段之一,它將把選定的文本插入到代碼段內(nèi)的占位符中。例如,我們可以將任何選定的代碼插入:
BEGIN…END塊(通過調(diào)用be片段)
IF塊(ifs)
TRY…CATCH塊(tc)
CTE(cte)
創(chuàng)建視圖(cv)
創(chuàng)建內(nèi)聯(lián)表值函數(shù)(citf)
我將演示幾個(gè)示例,并說明如何制作自己的代碼片段,就像這些一樣,您可以通過幾次擊鍵進(jìn)行調(diào)用。
添加一個(gè)BEGIN…END塊
前面清單中第一行代碼下的另一條綠色花樣是另一個(gè)SQL Prompt“警告”,該代碼提示其內(nèi)置代碼分析規(guī)則之一。在這種情況下,這是一種樣式規(guī)則(ST003),建議將過程主體包含在中BEGIN…END中。
圖5
這不是存儲(chǔ)過程的要求,但是正如規(guī)則(ST003)中的說明告訴我們的那樣,多行用戶定義函數(shù)需要它,因此保持一致是一個(gè)很好的做法。無論如何,我認(rèn)為一個(gè)BEGIN…END塊有助于弄清楚什么是對(duì)象中的代碼,哪些不是對(duì)象的代碼。
要解決此問題,只需在過程中突出顯示查詢,然后從SQL Prompt的“操作”菜單中調(diào)用be片段即可?;蛘?,對(duì)于BEGIN…END、 WHILE 和IF,您只需右鍵單擊代碼,然后從上下文菜單中選擇“環(huán)繞聲”(Ctrl-K,Ctrl-S)。
圖6
現(xiàn)在,BAM,過程主體位于一個(gè)BEGIN...END塊中。在進(jìn)行此操作時(shí),我還使用了“插入分號(hào)” 操作向該END語(yǔ)句添加了分號(hào)。
CREATE OR ALTER PROCEDURE Application.Cities$List @CityNameLike nvarchar(50) = '%', @CityNameUpperCaseFlag bit = 0 AS BEGIN SELECT Cities.CityID, CASE WHEN @CityNameUpperCaseFlag = 1 THEN UPPER(Cities.CityName) ELSE Cities.CityName END, Cities.Location FROM Application.Cities WHERE Cities.CityName LIKE @CityNameLike; END;
清單3
將查詢重構(gòu)為代碼模塊
SQL Prompt還可以輕松地以視圖、內(nèi)聯(lián)表值函數(shù)或公用表表達(dá)式的形式將查詢重構(gòu)為可重用的邏輯。例如,突出顯示清單4中的查詢…
SELECT CustomerID, CustomerName, BillToCustomerID, CustomerCategoryID FROM Sales.Customers;
清單4
并調(diào)用cv(創(chuàng)建視圖)代碼段,您的查詢現(xiàn)在包含在視圖定義的開始部分。
CREATE VIEW [schema].[view_name] --WITH ENCRYPTION, SCHEMABINDING, VIEW_METADATA AS SELECT CustomerID, CustomerName, BillToCustomerID, CustomerCategoryID FROM Sales.Customers; -- WITH CHECK OPTION GO
清單5
這很好地提醒了視圖定義的重要部分,并且在給它命名后就可以在這里正常工作,但是在大多數(shù)情況下,這只是一個(gè)基本的起點(diǎn)。另外,沒有語(yǔ)法驗(yàn)證,因此您可以很高興地調(diào)用cv片段將清單6轉(zhuǎn)換為視圖,即使它不會(huì)編譯,因?yàn)闆]有變量聲明,即使有,也沒有變量在視圖中允許。
SELECT CustomerID, CustomerName, BillToCustomerID, CustomerCategoryID FROM Sales.Customers WHERE @CustomerId = 1;
清單6
相反,您可能需要使用“創(chuàng)建內(nèi)聯(lián)表函數(shù)”(citf)代碼段。
CREATE FUNCTION [schema].[function_name] (@parameter_name AS INT) RETURNS TABLE --WITH ENCRYPTION|SCHEMABINDING, ... AS RETURN ( SELECT CustomerID, CustomerName, BillToCustomerID, CustomerCategoryID FROM Sales.Customers WHERE @CustomerId = 1; ) GO
清單7
同樣,這是創(chuàng)建函數(shù)的一個(gè)有用的開始,特別是因?yàn)槲医?jīng)常忘記創(chuàng)建任何類型函數(shù)的語(yǔ)法,但是當(dāng)然,如果需要,您仍然需要處理@CustomerId變量并將其作為參數(shù)。
使用自定義片段進(jìn)行重構(gòu)
您可以輕松構(gòu)建自己的代碼片段來重構(gòu)一段代碼。例如,我經(jīng)常需要做的一件事就是使用多行注釋符號(hào)注釋掉大塊代碼。
這是一個(gè)非常簡(jiǎn)單的自定義代碼片段。要?jiǎng)?chuàng)建它,只需瀏覽SQL Prompt | Snippet Manager…| New…,為代碼段添加一個(gè)初始名稱和說明,然后輸入代碼段代碼。創(chuàng)建此代碼后,我只需要突出顯示要注釋掉的塊,從“提示操作”列表中選擇“co”,文本將被包含在注釋中,我還將看到誰(shuí)注釋掉了文本,并且什么時(shí)候。
圖7
對(duì)于這樣的代碼段,我還可以看到很多其他用途,例如變量聲明(我創(chuàng)建了多少次@msg保存一條THROW語(yǔ)句的消息?)
內(nèi)聯(lián)執(zhí)行:重構(gòu)以進(jìn)行測(cè)試
提示:在查詢窗口中,突出顯示存儲(chǔ)過程的EXEC命令、標(biāo)量函數(shù)或sp_executesql函數(shù),然后從右鍵單擊內(nèi)容菜單中選擇Inline Exec。SQL Prompt用等效的內(nèi)聯(lián)代碼替換它。
假設(shè)我們要測(cè)試應(yīng)用程序Cities$List存儲(chǔ)過程,因此我們對(duì)該過程的調(diào)用進(jìn)行了編碼,如下所示:
EXECUTE Application.Cities$List @CityNameLike = 'Nash%'
清單8
這會(huì)返回大量數(shù)據(jù),并且您想更深入地看一下代碼,因?yàn)楦杏X有些不對(duì)勁。突出顯示Cities$List,右鍵單擊并選擇Inline Exec。該過程的參數(shù)將被轉(zhuǎn)換為變量,并將使用您傳入的變量值(或者默認(rèn)值,如果您已經(jīng)省略了一個(gè)參數(shù),就像我一樣),如清單9所示。
DECLARE @CityNameLike1 nvarchar(50), @CityNameUpperCaseFlag1 bit; SET @CityNameLike1 = 'Nash%'; SET @CityNameUpperCaseFlag1 = NULL; BEGIN SELECT Cities.CityID, CASE WHEN @CityNameUpperCaseFlag1 = 1 THEN UPPER(Cities.CityName) ELSE Cities.CityName END, Cities.Location FROM Application.Cities WHERE Cities.CityName LIKE @CityNameLike1; END;
清單9
這可能不是要做的最復(fù)雜的重構(gòu),但這是一項(xiàng)常見而繁瑣的任務(wù),尤其是當(dāng)您有很多參數(shù)并且一個(gè)或多個(gè)具有默認(rèn)值時(shí)。
摘要
SQL Prompt包含許多不錯(cuò)的工具,可以幫助您重構(gòu)代碼,這些工具都很小,很容易每天使用。作為程序員,有時(shí)很難不僅僅依賴于查找和替換,但是在SQL Prompt中,我發(fā)現(xiàn)更多類似這些工具的工具時(shí),在做事不那么簡(jiǎn)單的情況下,我發(fā)現(xiàn)它們?cè)接杏谩?/p>
本教程內(nèi)容就是這樣了,感興趣的朋友可以下載SQL Prompt嘗試一下哦~
相關(guān)內(nèi)容推薦:
SQL語(yǔ)法提示工具SQL Prompt教程:使用SQL Prompt重構(gòu)批處理或?qū)ο螅ㄉ希?/span>
想要購(gòu)買SQL Prompt正版授權(quán),或了解更多產(chǎn)品信息請(qǐng)點(diǎn)擊“咨詢?cè)诰€客服”