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