翻譯|使用教程|編輯:莫成敏|2019-09-27 13:57:33.827|閱讀 246 次
概述:本教程演示了SQL Prompt如何幫助“小規(guī)模” SQL重構(gòu)任務(wù),該任務(wù)的范圍通常僅限于您在本地工作的單批代碼或代碼對象。這些任務(wù)直接在SSMS查詢窗口中執(zhí)行,并且可以幫助您以各種方式重構(gòu)代碼,這些方式在測試存儲過程和對存儲過程進行故障排除時非常有用。本文主要是教程后半部分內(nèi)容~
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
SQL Prompt是一款實用的SQL語法提示工具。SQL Prompt根據(jù)數(shù)據(jù)庫的對象名稱、語法和代碼片段自動進行檢索,為用戶提供合適的代碼選擇。自動腳本設(shè)置使代碼簡單易讀——當(dāng)開發(fā)者不大熟悉腳本時尤其有用。SQL Prompt安裝即可使用,能大幅提高編碼效率。
本教程演示了SQL Prompt如何幫助“小規(guī)模” SQL重構(gòu)任務(wù),該任務(wù)的范圍通常僅限于您在本地工作的單批代碼或代碼對象。這些任務(wù)直接在SSMS查詢窗口中執(zhí)行,并且可以幫助您以各種方式重構(gòu)代碼,這些方式在測試存儲過程和對存儲過程進行故障排除時非常有用。本文主要是教程后半部分,內(nèi)容緊接上文~
使用代碼片段進行重構(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)
我將演示幾個示例,并說明如何制作自己的代碼片段,就像這些一樣,您可以通過幾次擊鍵進行調(diào)用。
添加一個BEGIN…END塊
前面清單中第一行代碼下的另一條綠色花樣是另一個SQL Prompt“警告”,該代碼提示其內(nèi)置代碼分析規(guī)則之一。在這種情況下,這是一種樣式規(guī)則(ST003),建議將過程主體包含在中BEGIN…END中。
圖5
這不是存儲過程的要求,但是正如規(guī)則(ST003)中的說明告訴我們的那樣,多行用戶定義函數(shù)需要它,因此保持一致是一個很好的做法。無論如何,我認(rèn)為一個BEGIN…END塊有助于弄清楚什么是對象中的代碼,哪些不是對象的代碼。
要解決此問題,只需在過程中突出顯示查詢,然后從SQL Prompt的“操作”菜單中調(diào)用be片段即可。或者,對于BEGIN…END、 WHILE 和IF,您只需右鍵單擊代碼,然后從上下文菜單中選擇“環(huán)繞聲”(Ctrl-K,Ctrl-S)。
圖6
現(xiàn)在,BAM,過程主體位于一個BEGIN...END塊中。在進行此操作時,我還使用了“插入分號” 操作向該END語句添加了分號。
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ù)或公用表表達式的形式將查詢重構(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ù)情況下,這只是一個基本的起點。另外,沒有語法驗證,因此您可以很高興地調(diào)用cv片段將清單6轉(zhuǎ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ù)的一個有用的開始,特別是因為我經(jīng)常忘記創(chuàng)建任何類型函數(shù)的語法,但是當(dāng)然,如果需要,您仍然需要處理@CustomerId變量并將其作為參數(shù)。
使用自定義片段進行重構(gòu)
您可以輕松構(gòu)建自己的代碼片段來重構(gòu)一段代碼。例如,我經(jīng)常需要做的一件事就是使用多行注釋符號注釋掉大塊代碼。
這是一個非常簡單的自定義代碼片段。要創(chuàng)建它,只需瀏覽SQL Prompt | Snippet Manager…| New…,為代碼段添加一個初始名稱和說明,然后輸入代碼段代碼。創(chuàng)建此代碼后,我只需要突出顯示要注釋掉的塊,從“提示操作”列表中選擇“co”,文本將被包含在注釋中,我還將看到誰注釋掉了文本,并且什么時候。
圖7
對于這樣的代碼段,我還可以看到很多其他用途,例如變量聲明(我創(chuàng)建了多少次@msg保存一條THROW語句的消息?)
內(nèi)聯(lián)執(zhí)行:重構(gòu)以進行測試
提示:在查詢窗口中,突出顯示存儲過程的EXEC命令、標(biāo)量函數(shù)或sp_executesql函數(shù),然后從右鍵單擊內(nèi)容菜單中選擇Inline Exec。SQL Prompt用等效的內(nèi)聯(lián)代碼替換它。
假設(shè)我們要測試應(yīng)用程序Cities$List存儲過程,因此我們對該過程的調(diào)用進行了編碼,如下所示:
EXECUTE Application.Cities$List @CityNameLike = 'Nash%'
清單8
這會返回大量數(shù)據(jù),并且您想更深入地看一下代碼,因為感覺有些不對勁。突出顯示Cities$List,右鍵單擊并選擇Inline Exec。該過程的參數(shù)將被轉(zhuǎn)換為變量,并將使用您傳入的變量值(或者默認(rèn)值,如果您已經(jīng)省略了一個參數(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),但這是一項常見而繁瑣的任務(wù),尤其是當(dāng)您有很多參數(shù)并且一個或多個具有默認(rèn)值時。
摘要
SQL Prompt包含許多不錯的工具,可以幫助您重構(gòu)代碼,這些工具都很小,很容易每天使用。作為程序員,有時很難不僅僅依賴于查找和替換,但是在SQL Prompt中,我發(fā)現(xiàn)更多類似這些工具的工具時,在做事不那么簡單的情況下,我發(fā)現(xiàn)它們越有用。
本教程內(nèi)容就是這樣了,感興趣的朋友可以下載SQL Prompt嘗試一下哦~
相關(guān)內(nèi)容推薦:
SQL語法提示工具SQL Prompt教程:使用SQL Prompt重構(gòu)批處理或?qū)ο螅ㄉ希?/span>
想要購買SQL Prompt正版授權(quán),或了解更多產(chǎn)品信息請點擊
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn