2008-09-17 58 views
2

我即將繼承一套龐大而複雜的存儲過程集,每月對大量數據集進行處理。如何維護大型t-sql程序

我們正在調試它們,以便它們匹配在VB6中編寫的原始進程。他們決定在t-sql中重新編寫它們的原因是因爲vb過程需要數天,而這個新過程需要幾個小時。

這一切都很好,但是我怎樣才能讓這些現在大量的t-sql代碼塊(1.5k +行)甚至是遠程可讀/可維護的。

任何使t-sql沒有太多頭痛的經驗是非常受歡迎的。

回答

4

首先,創建一個包含.sql文件的目錄並將它們保存在那裏。將這組.sql文件添加到版本控制系統。 SVN運作良好。有一個工具將這些加載到數據庫中,覆蓋現有的數據庫。

有一個測試數據庫和基線報告,顯示每月處理的輸出應該是什麼樣子。您的測試也應該以版本控制下的.sql文件的形式出現。

您現在可以儘可能多地重構您的過程,然後運行測試以確認正確的功能。

0

一件事,你可以做的是/有一個自動化的腳本來存儲所有更改源控件,以便您可以查看到程序的改變(使用以前和當前版本差異)

2

對於格式化漂亮-fying SQL,我已經成功使用http://www.sqlinform.com/ - 您可以試用的免費在線版本以及可用的桌面版本。

SQLinForm是所有主流數據庫(ORACLE,SQL服務器,DB2/UDB中,Sybase,Informix的和PostgreSQL,MySQL的等)有許多格式選項自動SQL代碼格式化。

2

通過重新格式化代碼,尤其是縮進,開始。

然後模塊化SQL。在他們自己的獨立文件中將塊分成更小的,描述性命名的過程和函數。僅憑這一點,我發現可以很好地改善對大型SQL文件的理解。

1

嘗試儘可能模塊化SQL,並擁有一組測試,以便您在需要時維護,重構和添加功能。我曾經有幸繼承了一條總計5000行的存儲過程,我仍然對此有惡夢。一旦項目結束,我將存儲的proc打印出來,以便在此過程中使X樹破壞。在我們其中一家公司的每週舉辦的會議中,我首尾相接,它貫穿了整個建築。以此爲例說明如何不編寫和維護存儲過程。

2

ApexSQLScript是一個用於編寫整個數據庫的好工具 - 然後您可以將其檢入到源代碼管理中並管理更改。

我還發現,記錄sprocs始終可讓您使用有關sys.sql_modules中源代碼的數據提取有關它們的信息 - 您可以使用標記或任何其他信息來幫助文檔子系統。另外,使用模式(或甚至多個數據庫) - 這將確實有助於將數據庫劃分爲邏輯單元並指出體系結構問題。

就大代碼而言,我最近發現SQL2005 CTE功能在管理大量嵌套查詢(甚至不遞歸)的代碼時非常有用。 CTE不是管理一堆嵌套和縮進,而是可以聲明和構建CTE,然後在最後的聲明中使用。這也有助於重構,因爲刪除多餘的嵌套查詢和列似乎更容易。

存儲過程和UDF對於管理大型代碼庫和消除黑暗角落至關重要。我還沒有發現視圖非常有用,因爲它們不是可參數化的(如果結果集很小,則可以在這些情況下使用UDF)。

0

這絕對不是免費的,但爲了保持您的T-SQL格式一致,Redgate Software的SQL Prompt非常方便。只要你的proc的語法是正確的,幾個擊鍵(Ctrl + K,Y)將立即重新格式化它。這些選項使您可以很好地控制SQL的格式化。