SQL Prompt不只能夠按照您但願的格式精確地格式化代碼,還能夠幫助您快速切換到其餘樣式,或者將異常應用於不須要特定樣式的SQL腳本的某些部分。數據庫
SQL Prompt根據數據庫的對象名稱、語法和代碼片斷自動進行檢索,爲用戶提供合適的代碼選擇。自動腳本設置使代碼簡單易讀--當開發者不大熟悉腳本時尤爲有用。安裝便可使用,能大幅提升編碼效率。更多相關資訊,請上慧都網~ide
我使用SQL Prompt格式化個人代碼;在大多數狀況下,我已經定義了標準樣式,能夠按照我喜歡的方式對代碼進行佈局。對於特定的任務,我還有幾種替代樣式,例如比較同一代碼的兩個版本。工具
可是,有時候,標準格式對某些代碼或該代碼的某些部分不起做用。所以,像任何優秀工具同樣,SQL Prompt不只會爲您格式化代碼,還會爲您「取消格式化」,或者容許您有選擇地禁用某些部分的格式化。佈局
取消格式化代碼編碼
有時,您只是但願代碼或代碼的某些部分採用很是精簡的格式,一般只是由於格式化後的版本佔用太多行而且變得難以閱讀。例如,考慮清單1中針對WideWorldImporters數據庫的簡單查詢。spa
SELECT * FROM Sales.Customers
清單1code
顯然,我不但願在生產應用程序中使用*這樣的代碼,所以我使用Format SQL命令(或Ctrl K,Ctrl Y快捷鍵)應用SQL Prompt自定義樣式。我還配置了Prompt Format > Styles選項,以便某些格式化操做做爲此命令的一部分運行,包括Expand Wildcards和Insert Semicolons。我最終獲得了一條長達32行的語句,如清單2所示。orm
SELECT CustomerID, CustomerName, BillToCustomerID, CustomerCategoryID, BuyingGroupID, PrimaryContactPersonID, AlternateContactPersonID, DeliveryMethodID, DeliveryCityID, PostalCityID, CreditLimit, AccountOpenedDate, StandardDiscountPercentage, IsStatementSent, IsOnCreditHold, PaymentDays, PhoneNumber, FaxNumber, DeliveryRun, RunPosition, WebsiteURL, DeliveryAddressLine1, DeliveryAddressLine2, DeliveryPostalCode, DeliveryLocation, PostalAddressLine1, PostalAddressLine2, PostalPostalCode, LastEditedBy, ValidFrom, ValidTo FROM Sales.Customers;
清單2對象
我但願SELECT列表採用更簡潔的格式,爲此,我可使用一個有趣的動做,稱爲unformat。突出顯示清單2中的整個語句,而後從「操做」菜單中,開始輸入unformat,而後從過濾的列表中選擇它。blog
當我第一次看到此命令時,我設想在格式化代碼後,它就像一個「撤消」按鈕,但事實並不是如此。它不會撤消您剛剛應用的任何重構操做的影響,可是會刪除全部空格字符,並用單個空格字符替換。結果是它從代碼中刪除了全部漂亮的格式,並將語句的每一位都放在一行上(儘管它可能顯示爲自動換行,具體取決於它出現的位置或您的SSMS設置)。
SELECT Customers.CustomerID, Customers.CustomerName, Customers.BillToCustomerID, Customers.CustomerCategoryID, Customers.BuyingGroupID, Customers.PrimaryContactPersonID, Customers.AlternateContactPersonID, Customers.DeliveryMethodID, Customers.DeliveryCityID, Customers.PostalCityID, Customers.CreditLimit, Customers.AccountOpenedDate, Customers.StandardDiscountPercentage, Customers.IsStatementSent, Customers.IsOnCreditHold, Customers.PaymentDays, Customers.PhoneNumber, Customers.FaxNumber, Customers.DeliveryRun, Customers.RunPosition, Customers.WebsiteURL, Customers.DeliveryAddressLine1, Customers.DeliveryAddressLine2, Customers.DeliveryPostalCode, Customers.DeliveryLocation, Customers.PostalAddressLine1, Customers.PostalAddressLine2, Customers.PostalPostalCode, Customers.LastEditedBy, Customers.ValidFrom, Customers.ValidTo FROM Sales.Customers;
清單3
它將保留註釋周圍的空間,以確保雙連字符(--)註釋不會最終註釋掉全部剩餘的代碼。您能夠偶爾使用此技巧來防止提示使行長於換行(例如,當您須要在線發佈代碼時)。
固然,更常見的格式取消須要的不是完整的語句,而只是其中的一部分。幸運的是,若是僅突出顯示註釋的文本,則unformat操做可在語句甚至註釋的任何部分上起做用。我處理過不少次的地方是在處理大量項目時,一般是在使用「Copy as IN」子句功能時。
假設您的用戶要求一個查詢,該查詢將僅向他們顯示已訂購價值超過18000美圓商品的那些客戶的詳細信息。清單4將爲那些「高支出」客戶提供CustomerId值清單。
SELECT DISTINCT CustomerId--,Quantity * OrderLines.UnitPrice FROM Sales.Orders JOIN Sales.OrderLines ON OrderLines.OrderID = Orders.OrderID WHERE Quantity * OrderLines.UnitPrice > 18000;
清單4
在網格結果中,突出顯示該列,右鍵單擊並選擇Copy as IN子句,您能夠快速生成用戶所需的查詢。可是,它幾乎有100行。
SELECT * FROM Sales.Customers WHERE CustomerId IN ( 187, 509, 825, 935, 952, … 839, 1000, 1005, 1040 )
清單5
要將查詢發送給用戶,您可能不但願應用標準格式,這可能會擴展通配符,使查詢更長,而且根據格式樣式而使列表縮進等等。在這種狀況下,您能夠僅突出顯示ID列表,應用unformat操做,添加一些回車/換行符,查詢將如清單6所示。
SELECT * FROM Sales.Customers WHERE CustomerId IN ( 187, 509, 825, 935, 952, 1003, 415, 529, 583, 1006, 1018, 1056, 96, 166, 201, 472, 489, 863, 999, 15, 32, 45, 401, 899, 948, 988, 101, 527, 961, 26, 105, 427, 521, 813, 71, 413, 420, 480, 821, 37, 943, 950, 1010, 50, 102, 170, 460, 492, 560, 578, 815, 16, 117, 405, 410, 533, 922, 949, 954, 498, 829, 1017, 42, 67, 418, 834, 854, 861, 874, 911, 858, 892, 894, 437, 907, 912, 962, 14, 107, 524, 550, 930, 973, 40, 114, 431, 490, 807, 832, 839, 1000, 1005, 1040 )
清單6
選擇性禁用格式
就像SQL Prompt在格式化代碼方面同樣出色,有時,您只是不但願SQL Prompt接觸代碼的特定部分,由於格式化模板不能徹底知足您的要求。例如,假設您剛剛花了一些時間徹底正確地爲該部分代碼獲取了非標準格式,但如今想對其他的查詢再次應用Format SQL。
清單5的另外一種解決方案是,若是您知道標準樣式將徹底按照所需的格式設置列表項的格式,則僅是對語句的其他部分禁用格式設置,而且Prompt容許您輕鬆地作到這一點。只需突出顯示列表前面的代碼段(在清單5中),並對選定的文本操做應用Disable Formatting。註釋將出如今代碼部分,告訴SQL Prompt在突出顯示的部分開始處禁用格式設置,並在結尾處從新啓用它。而後,只需突出顯示整個語句並應用您選擇的樣式便可。
-- SQL Prompt formatting off SELECT * FROM Sales.Customers WHERE CustomerId IN -- SQL Prompt formatting on ( 187, 509, 825, 935, 952, 1003, 415, 529, 583, 1006, 1018, 1056, 96, 166, 201, 472, 489, 863, 999, 15, 32, 45, 401, 899, 948, 988, 101, 527, 961, 26, 105, 427, 521, 813, 71, 413, 420, 480, 821, 37, 943, 950, 1010, 50, 102, 170, 460, 492, 560, 578, 815, 16, 117, 405, 410, 533, 922, 949, 954, 498, 829, 1017, 42, 67, 418, 834, 854, 861, 874, 911, 858, 892, 894, 437, 907, 912, 962, 14, 107, 524, 550, 930, 973, 40, 114, 431, 490, 807, 832, 839, 1000, 1005, 1040 );
清單7
請注意,您也能夠手動鍵入格式控制註釋,一些間距、大小寫和結尾註釋不會阻止它們起做用。可是,該方法依賴於解析器看到雙連字符註釋(--)後跟SQL Prompt格式化Off(或On),所以,若是因爲某種緣由您不能或不使用雙連字符註釋,那麼您將沒法使用此控件方法。
在清單8中,我決定該SET子句應該所有顯示在一行上,該WHERE子句中的最後兩個布爾值也應該顯示在同一行上,所以我將unformat操做選擇性地應用在了每一個部分。
UPDATE Sales.CustomerCategories SET CustomerCategories.CustomerCategoryID = 1, CustomerCategories.CustomerCategoryName = N'New', CustomerCategories.LastEditedBy = 0 WHERE CustomerCategories.CustomerCategoryID = 1 AND CustomerCategories.CustomerCategoryName = N'New' AND CustomerCategories.LastEditedBy = 0;
清單8
而後,因爲麻煩使用自定義格式,所以我但願它保持這種狀態,因此我將「禁用」格式用於所選文本僅應用於語句的那些部分。
UPDATE Sales.CustomerCategories -- A code comment -- SQL Prompt formatting off SET CustomerCategories.CustomerCategoryID = 1, CustomerCategories.CustomerCategoryName = N'New', CustomerCategories.LastEditedBy = 0 -- SQL Prompt formatting on WHERE CustomerCategories.CustomerCategoryID = 1 -- Another comment -- SQL Prompt formatting off AND CustomerCategories.CustomerCategoryName = N'New' AND CustomerCategories.LastEditedBy = 0; -- SQL Prompt formatting on
清單9
如今,若是我應用Format SQL,它將不會影響代碼的那些註釋部分。可是,一個問題是該查詢中的註釋數量如今已失控,這使得該語句更難以閱讀。幸運的是,格式控制註釋沒必要單獨顯示。可是,它必須是該行的第一條評論。在清單10中,第一個Off控件註釋仍然有效,但第二個註釋無效。
UPDATE Sales.CustomerCategories -- SQL Prompt formatting off –- A code comment SET CustomerCategories.CustomerCategoryID = 1, CustomerCategories.CustomerCategoryName = N'New', CustomerCategories.LastEditedBy = 0 -- SQL Prompt formatting on WHERE CustomerCategories.CustomerCategoryID = 1 -- Another comment -- SQL Prompt formatting off AND CustomerCategories.CustomerCategoryName = N'New' AND CustomerCategories.LastEditedBy = 0; -- SQL Prompt formatting on
清單10
總結
大多數時候,目標是對全部代碼使用相同的標準格式。有時,該格式模板沒法徹底知足您的需求。爲此,SQL Prompt具備可獨立於Format SQL命令應用的操做,以取消格式化所選代碼或忽略該代碼的Format SQL命令。