2012-02-01 73 views
0

這個問題僅僅是爲了我個人的未來知識,因爲它適用的數據庫已經在一個特定的方向。SQL Server 2005默認值函數與INSERT語句調用的函數

在SQL Server 2005數據庫中,我們有一個函數根據Utc時間和本地客戶端的時區返回DateTime值。此功能在兩個方面得到應用:

  1. 作爲默認值的函數調用爲列
  2. 在各種存儲特效的INSERT語句中的函數調用。

很明顯,第一種方法更容易實現,並且可以說在開發工作方面更具可擴展性。

我的問題是,在服務器上的工作負載/完成事務的時間方面,使用一種方法的效率是否有顯着的優勢。我希望這個問題不太含糊。先感謝您的任何見解。

回答

0

如果它是默認值,它將被精確計算一次。如果它是存儲過程的一部分進行插入,它將只計算一次。如果計算是通過一個選擇的過程來完成的(我知道你不是在暗示這一點,但有些未來的讀者可能會考慮這個問題),它會重新計算多次。

如果它是默認值,那麼無論數據庫中的數據如何輸入,都可以確保它將始終填充。如果其他數據發生變化時需要更新,那麼無論數據如何變化,觸發器都會使其保持最新狀態。如果多個存儲過程可能會被寫入來執行相同的操作(這可能會被不同的應用程序調用),那麼您將面臨使用填充字段的不同方法的風險。此外,您有可能在查詢窗口,腳本,導入等插入過程之外輸入數據。如果您可能需要從另一個系統或新客戶端移植大量數據並運行,尤其如此通過插入處理一次記錄一個記錄太慢。

我說的默認函數(和一個觸發器,如果​​您需要保持日期更新出於任何原因)是最容易維護和最不利於數據完整性的負面影響的方式。它也可能與存儲過程一樣快地執行插入操作,並且比存儲過程要好得多,該過程可以在select而不是insert上進行計算。

0

無論函數在哪裏,函數都必須每列每行進行一次評估。

從維護的角度來看,默認情況下要簡單得多。假設你必須用新版本替換它:在一個地方改變它或在很多地方改變它?