• <menu id="w2i4a"></menu>
  • logo SQL Prompt教程

    文檔首頁>>SQL Prompt教程>>SQL語法提示工具SQL Prompt教程:使用SQL Prompt重構(gòu)批處理或?qū)ο螅ㄉ希?/a>

    SQL語法提示工具SQL Prompt教程:使用SQL Prompt重構(gòu)批處理或?qū)ο螅ㄉ希?/h1>

    SQL Prompt是一款實用的SQL語法提示工具。SQL Prompt根據(jù)數(shù)據(jù)庫的對象名稱、語法和代碼片段自動進行檢索,為用戶提供合適的代碼選擇。自動腳本設(shè)置使代碼簡單易讀——當(dāng)開發(fā)者不大熟悉腳本時尤其有用。SQL Prompt安裝即可使用,能大幅提高編碼效率。

    點擊下載SQL Prompt免費版

    Louis Davidson揭示了一些有用的提示功能,可在開發(fā)過程中重構(gòu)單個代碼塊或模塊,這將提高代碼質(zhì)量,減少繁瑣的工作,使測試更簡單,有時甚至是全部三種功能。

    SQL Prompt是我一直使用的工具,用于代碼完成和代碼格式化任務(wù),以至于在沒有它的情況下編寫查詢感覺非常錯誤。用JOIN編寫SQL語句,它會自動建議ON條件。在ORDER BY或者GROUP BY子句中,它有助于選擇分組列。審查一些丑陋的代碼(也許是自己寫的)用您喜歡的樣式很好地格式化它。

    但是,SQL Prompt具有許多其他功能,這些功能我很少用,但在需要的時候非常有用。本教程演示了SQL Prompt如何幫助“小規(guī)?!?SQL重構(gòu)任務(wù),該任務(wù)的范圍通常僅限于您在本地工作的單批代碼或代碼對象。這些任務(wù)直接在SSMS查詢窗口中執(zhí)行,并且可以幫助您以各種方式重構(gòu)代碼,這些方式在測試存儲過程和對存儲過程進行故障排除時非常有用。這篇文章主要是教程的上半部分內(nèi)容~

    本文中的所有示例均從WideWorldImporters示例數(shù)據(jù)庫的新恢復(fù)的副本開始。

    重命名別名/變量

    提示:將光標(biāo)置于別名或變量上,從上下文菜單中選擇“重命名別名/變量”,或按F2鍵,然后輸入新名稱。當(dāng)前批次或?qū)ο笾械乃衅ヅ漤椌迅摹?/p>

    有時,程序員為變量或別名選擇了較差的名稱。我已經(jīng)看到@I,如果仔細檢查,可以更有效地將其稱為@EnableSystemFunctionsSetting。我們一次又一次地感到內(nèi)疚,當(dāng)您需要快速進行編碼時,標(biāo)準(zhǔn)往往會失效,而我們常常忘記暫停,并仔細考慮可能使用的最佳名稱。

    下列代碼顯示了一個應(yīng)用程序。Cities$List存儲過程后面是第二個批處理(只是為了演示這種重命名的工作方式)。假設(shè)您想將@CityName重命名為@CityNameLike,使用戶清楚的知道他們可以傳遞LIKE表達式。

    CREATE OR ALTER PROCEDURE Application.Cities$List
          @CityName nvarchar(50) = '%', @CityNameUpperCaseFlag bit = 0
      AS
          DECLARE @CityNameValue nvarchar(50);
          SELECT Cities.CityID,
                 CASE WHEN @CityNameUpperCaseFlag = 1
                          THEN UPPER(Cities.CityName)
                      ELSE Cities.CityName
                 END,
                 Cities.Location
          FROM   Application.Cities
          WHERE  Cities.CityName LIKE @CityName;
      GO
      DECLARE @CityName int;
      SELECT  @CityName
      GO

    清單1

    當(dāng)然,一種久經(jīng)考驗并幾乎是正確的方法是查找并替換(Ctrl + H)。但是,如果您不注意,可能會導(dǎo)致一些參數(shù)意外地重命名為@CityNameLikeUpperCaseFlag,并且在當(dāng)前對象的預(yù)期范圍之外重命名參數(shù)和變量。

    圖1

    使用SQL Prompt的重命名別名/變量重構(gòu),您可以更精確地執(zhí)行此任務(wù)。突出顯示@CityName的出現(xiàn)項,或?qū)⒐鈽?biāo)放在其上,它僅突出顯示當(dāng)前范圍內(nèi)@CityName的另一確切出現(xiàn)項。與查找和替換不同,它不會突出顯示任何不完全匹配的內(nèi)容,并且不會觸及第二批。

    圖2

    現(xiàn)在,右鍵單擊選擇重命名別名/變量,或按F2,然后在矩形框內(nèi)看到變量時,鍵入替換名稱CityNameLike,然后按Enter以“提交”更改名稱。如果輸入有誤,則可以使用單個“撤消”(Ctrl-Z)修復(fù)損壞。

    接下來,您可能需要將Cities表的別名更改為較短的名稱,例如c。如果單擊的任何實例Cities,則SQL Prompt將突出顯示其他實例,但由于Cities不是別名,因此SQL Prompt的Rename Alias / Variable方法將不起作用。不過,這很容易解決。只需建立Cities一個別名,然后突出顯示它并點擊F2即可。

    圖3

    替換Cities為c,單擊Enter,新代碼將如下所示。

    CREATE OR ALTER PROCEDURE Application.Cities$List
        @CityNameLike nvarchar(50) = '%', @CityNameUpperCaseFlag bit = 0
    AS
    DECLARE @CityNameValue nvarchar(50);
     
    SELECT c.CityID,
           CASE WHEN @CityNameUpperCaseFlag = 1
                    THEN UPPER(c.CityName)
                ELSE c.CityName
           END,
           c.Location
    FROM   Application.Cities AS c
    WHERE  c.CityName LIKE @CityNameLike;
    GO

    查找未使用的變量和參數(shù)

    提示:在查詢窗口中,可以選擇突出顯示代碼塊,從SQL Prompt菜單中選擇“查找未使用的變量和參數(shù)”,或按(Ctrl B,Ctrl F),然后Prompt將在所有未使用的變量或參數(shù)下劃線。

    在圖3中,您可以在下面看到一條綠色的波浪線@CityNameValue(和過程名稱,稍后再介紹)。這是SQL Prompt代碼分析功能,可提醒我們注意已聲明但從未使用過的變量。

    圖4

    即使您關(guān)閉了此功能(在使用非常大的腳本時,有時也會這樣做),您仍然可以使用“查找未使用的變量和參數(shù)”(Ctrl B + Ctrl F),并且在@CityNameValue變量下方會看到相同的綠色波浪線,和相同的消息。讓我們簡單地刪除該變量聲明,然后繼續(xù)進行此代碼的更多改進。

    本教程內(nèi)容尚未完結(jié),后面將更新下半部分內(nèi)容,包括“使用代碼片段進行重構(gòu)”和“內(nèi)聯(lián)執(zhí)行:重構(gòu)以進行測試”,感興趣的朋友可以下載SQL Prompt試一下哦~

    相關(guān)內(nèi)容推薦:

    SQL Prompt系列教程>>>


    想要購買SQL Prompt正版授權(quán),或了解更多產(chǎn)品信息請點擊“咨詢在線客服”

    Zend-Studio-640×220.png


    掃碼咨詢


    添加微信 立即咨詢

    電話咨詢

    客服熱線
    023-68661681

    TOP
    三级成人熟女影院,欧美午夜成人精品视频,亚洲国产成人乱色在线观看,色中色成人论坛 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();