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

    文檔首頁>>SQL Prompt教程>>SQL語法提示工具SQL Prompt教程:使用SQL Prompt重構(gòu)數(shù)據(jù)庫(下)

    SQL語法提示工具SQL Prompt教程:使用SQL Prompt重構(gòu)數(shù)據(jù)庫(下)


    SQL Prompt根據(jù)數(shù)據(jù)庫的對象名稱、語法和代碼片段自動(dòng)進(jìn)行檢索,為用戶提供合適的代碼選擇。自動(dòng)腳本設(shè)置使代碼簡單易讀--當(dāng)開發(fā)者不大熟悉腳本時(shí)尤其有用。SQL Prompt安裝即可使用,能大幅提高編碼效率。此外,用戶還可根據(jù)需要進(jìn)行自定義,使之以預(yù)想的方式工作。

    點(diǎn)擊下載SQL Prompt正式版

    本教程演示了SQL Prompt如何顯著地減少偶爾出現(xiàn)的“重量級”數(shù)據(jù)庫重構(gòu)過程所帶來的痛苦,例如重命名模塊、表和列(智能重命名)或拆分表(拆分表)。前面小編介紹了教程上半部分內(nèi)容“智能重命名”,現(xiàn)在主要介紹后半部分內(nèi)容——拆分表~

    拆分表

    通過在SSMS對象資源管理器中選擇一個(gè)對象,SQL Prompt的“拆分表”向?qū)е荚谏梢粋€(gè)腳本,該腳本創(chuàng)建鏈接表、修改原始表以及修改引用主表的任何對象。檢查腳本后,您可以執(zhí)行它。SQL Prompt將所有更改包裝在一個(gè)事務(wù)中,因此可以將它們回滾以防萬一發(fā)生任何錯(cuò)誤。

    您將不需要將現(xiàn)有表一分為二,也不必冒著被破壞的風(fēng)險(xiǎn),但是當(dāng)您這樣做時(shí),SQL Prompt的“拆分表”功能可以節(jié)省大量時(shí)間和精力。我考慮這樣做的主要原因是出于性能原因,“隔離”現(xiàn)有表中的非常大的列,但有時(shí)只是為了方便起見。

    例如,假設(shè)我們要向Purchasing.ThePurchaseOrders表中添加系統(tǒng)版本控制。我們只想將版本歷史記錄保留在該OrderDate2列中。實(shí)際上,即使我們想對表格的大部分內(nèi)容進(jìn)行版本控制,也可能不想在兩個(gè)nvarchar(max)列上保留歷史記錄,因?yàn)槊看胃露紩?chuàng)建一個(gè)新的文本副本,副本最多可包含2GB的文本。

    因此,我們的目標(biāo)是將OrderDate2列移出ThePurchaseOrders表并移到新表中,然后可以對其應(yīng)用系統(tǒng)版本控制。右鍵單擊ThePurchaseOrders表,選擇“拆分表”,將出現(xiàn)向?qū)?。為新的輔助表命名,如ThePurchaseOrdersTemporal,然后在下一個(gè)屏幕上,將復(fù)制鍵PurchaseOrderId,然后將OrderDate2移動(dòng)到新表中,如圖5所示。兩個(gè)表都將具有主鍵,因此不能有重復(fù)的行在兩個(gè)表中。

    SQL語法提示工具SQL Prompt教程:使用SQL Prompt重構(gòu)數(shù)據(jù)庫(下)

    圖5

    下一個(gè)屏幕將要求您創(chuàng)建一個(gè)外鍵,該外鍵確定了將數(shù)據(jù)插入這些表的順序。

    SQL語法提示工具SQL Prompt教程:使用SQL Prompt重構(gòu)數(shù)據(jù)庫(下)

    圖6

    這樣可確保添加到Purchasing.ThePurchaseOrders表中的任何行都引用的PurchaseOrderID列中的現(xiàn)有值Purchasing.ThePurchaseOrdersTemporal。

    單擊“下一步”,您將看到有關(guān)將要執(zhí)行的操作,所做更改的依賴性以及與所需操作有關(guān)的所有警告的信息。在這種情況下,我們會看到警告,它不能處理非標(biāo)準(zhǔn)文件組,也不能保證在從父表中刪除列時(shí)不能自動(dòng)保留數(shù)據(jù)(盡管在這種情況下,生成的腳本會將您的數(shù)據(jù)保存在新表中)。

    SQL語法提示工具SQL Prompt教程:使用SQL Prompt重構(gòu)數(shù)據(jù)庫(下)

    圖7

    當(dāng)然,您總是希望檢查和微調(diào)這些生成的腳本之一。SQL Prompt可能不會每次都正確。您需要確保該工具所做的更改符合您計(jì)劃使用數(shù)據(jù)的方式。例如,該OrderDate2列定義為NOT NULL。但是,既然該列在相關(guān)表中,則該列在技術(shù)上可以為空,因?yàn)槟荒軓?qiáng)制使用1-1關(guān)系。

    單擊查看腳本按鈕將使該工具生成一個(gè)腳本,您可以使用該腳本來應(yīng)用更改。它將創(chuàng)建新表及其主鍵,將數(shù)據(jù)加載到新創(chuàng)建的表中,從原始表中刪除該列,更改所有相關(guān)對象,添加FOREIGN KEY并最終在新表的列上建立擴(kuò)展屬性。

    將更改所有從屬對象以解決新的架構(gòu)設(shè)計(jì)。 例如,修改了PurchaseOrder $ ListAll過程以替換對Purchasing.ThePurchaseOrders的引用,并在Purchasing.ThePurchaseOrders和Purchasing.ThePurchaseOrdersTemporal之間使用INNER JOIN進(jìn)行替換,如清單7所示。

    這是INNER JOIN因?yàn)槠谕@兩行都是必需的,因?yàn)樗鼈儗⒁黄鸪蔀楸淼囊徊糠?。即使您只選擇了允許NULL值的列也是如此(您可能不希望如此,因此請單獨(dú)檢查每種情況并相應(yīng)地更改代碼)。

    ALTER PROCEDURE Purchasing.[PurchaseOrder$ListAll]
      (
          @IsOrderFinalized bit
      ) AS
      BEGIN
          SELECT ThePurchaseOrders.PurchaseOrderID, 
                 ThePurchaseOrdersTemporal.OrderDate, 
                         ThePurchaseOrders.IsOrderFinalized
          FROM   <strong>(Purchasing.ThePurchaseOrders INNER JOIN   </strong>
      <strong>            Purchasing.ThePurchaseOrdersTemporal ON </strong>
      <strong>                  ThePurchaseOrders.purchaseorderid=</strong>
      <strong>                  ThePurchaseOrdersTemporal.purchaseorderid)</strong>
          WHERE  IsOrderFinalized = @IsOrderFinalized;
      END;

    清單7

    與修改表并可能發(fā)生數(shù)據(jù)丟失的任何過程一樣,強(qiáng)烈建議您檢查生成的腳本,并在數(shù)據(jù)庫結(jié)構(gòu)的副本上至少測試一次部署,如果腳本中的內(nèi)容有誤,請進(jìn)行備份。一旦完全滿意,就可以運(yùn)行腳本,然后將時(shí)間擴(kuò)展應(yīng)用于Purchasing.ThePurchaseOrdersTemporal表,而不是原始表。

    最后提醒您測試您的代碼,并確保所有代碼在SQL Server對象和用戶界面中均按預(yù)期工作。您正在極大地改變對象與外界的接口。

    結(jié)論

    在本教程中,我們研究了SQL Prompt中兩個(gè)最少使用的功能,但是在您需要它們時(shí)它們是無價(jià)的。如果您必須重命名對象或列,甚至將一個(gè)表拆分為兩個(gè)表,毫無疑問,智能重命名和拆分表功能可以為您節(jié)省大量時(shí)間,特別是如果您已實(shí)現(xiàn)SQL Server使用以服務(wù)器為中心的范例的數(shù)據(jù)庫,其中包含約束、觸發(fā)器和存儲過程。

    您可以用更少的精力來進(jìn)行大規(guī)模的名稱和結(jié)構(gòu)更改,這意味著您可以投入更多的時(shí)間和精力來測試應(yīng)用程序在重構(gòu)后將繼續(xù)按預(yù)期正常運(yùn)行。

    本教程內(nèi)容到這里就完結(jié)啦,感興趣的朋友可以繼續(xù)關(guān)注我們后續(xù)內(nèi)容哦~也可以下載SQL Prompt試用版體驗(yàn)一下~

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

    SQL語法提示工具SQL Prompt教程:使用SQL Prompt重構(gòu)數(shù)據(jù)庫(下)

    SQL Prompt系列教程>>>


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

    掃碼咨詢


    添加微信 立即咨詢

    電話咨詢

    客服熱線
    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); })();