2009-06-02 37 views
2

我正在編寫一個運行接近2000行代碼的相當長的SQL腳本。由於理解長文字變得非常困難,我想將其分解爲邏輯單元並將它們分離出來放入其他SQL文件中。分解SQL腳本

這樣做的最好方法是什麼?每個邏輯單元都需要成爲一個存儲過程嗎?也許是UDF?

回答

2

利用存儲過程和函數。如果你在做純SQL,那麼沒有更好的代碼邏輯單元。此外,它使維護/編輯代碼變得更容易。這就是說,如果你的腳本很長,你可能想看看你在做什麼,並考慮另一種腳本語言,甚至是C#/ LINQ。有時候將所有內容全部保存在SQL中是有意義的,有時候你會強迫某些東西進入SQL,但只有你可以做出這樣的決定。另外,C#或其他腳本語言也很容易與源代碼控制集成。只需要考慮一下!

0

首先,2000行的SQL並不是文件中過多的數量(DDL經常爲適中的大型數據庫運行這麼多或更多)。但是,在單個進程中使用太多了!解決這個問題的方法確實是將邏輯組件分解成單獨的過程。除非你有一個特定的瓶頸來克服或在SQL中不容易完成的操作,否則你將不需要UDF。

最後一句忠告:考慮通過視圖簡化您的數據訪問。

順便說一句:你想用這麼大的程序來完成什麼?我使用T-SQL做了大量工作,而且我從來沒有接近2000行代碼!

+0

我在寫一個deploymnet腳本,通過存儲過程填充大量表。部署腳本正在調用不同的SP集 – 2009-06-02 20:54:49

0

你用什麼來打破它可以根據你在做什麼改變。

這與任何編程語言類似,廣告腳本/功能太大,需要分解。

如果您的腳本由於相同或相似的查詢而較大,則可以通過將這些查詢添加爲視圖來減少腳本。

存儲過程和用戶​​定義的函數也是另一個好方法,取決於你的代碼在做什麼。

0

這似乎是一批批的很多代碼。

將每個邏輯步驟/過程(即創建訂單/調度訂單/註冊客戶)分解爲單獨的存儲過程。您可能會發現創建一個流程圖並使用它來幫助分解您的T-SQL代碼批處理的位置很有用。

如果您嘗試使用T-SQL然後將這樣的操作,以託管代碼,如CLR函數等

0

把它分解成多個SP進行計算邏輯,增加的try-catch塊和錯誤處理(記,除以0不是可能的錯誤),並建立一個工作按順序執行每一個工作。