我有一個存儲過程,我開始發現難以維護。目標是用日,月和年存儲的值更新Stats
表中的值。DRY SQL存儲過程;非常類似的UPDATE語句
這意味着我寫了3次基本相同的WHERE
子句,只有日期比較部分和相應的DateType不同。每次我需要更改where子句時,我必須在3個地方進行相同的更改。我有很多不同的統計數據,客戶要求我們經常更換它們。以下是我今天/每月/每年創建的男性聯繫人的統計信息。
E.g:
UPDATE Stats
SET Content = (SELECT COUNT(*) FROM Contacts
WHERE Gender=1 AND DATEDIFF(DAY, GetDate(), Created) = 0)
WHERE DateType = 1 AND StatType = 1
UPDATE Stats
SET Content = (SELECT COUNT(*) FROM Contacts
WHERE DATEDIFF(MONTH, GetDate(), Created) = 0)
WHERE DateType = 2 AND StatType = 1
UPDATE Stats
SET Content = (SELECT COUNT(*) FROM Contacts
WHERE DATEDIFF(YEAR, GetDate(), Created) = 0)
WHERE DateType = 3 AND StatType = 1
我想什麼(但不知道怎麼寫)是某種存儲過程中,我可以通過僅僅一次我的條款,即exec sp_updateStatsDayMonthYear 'SELECT COUNT(*) FROM Contacts WHERE Gender=1'
。
如果你想打電話給你不妨考慮一下動態SQL存儲過程,你爲什麼要這麼做?爲什麼不用VIEW或TVF即時獲取這些值?有多少行,有多少個新插入? – Shnugo
@Shnugo我們這樣做是因爲有大約25個數據,每個數據都是按日/月/年來完成的,而且這個數字只會越來越大。對於用戶而言,這需要很長的時間(它們比今天創建的用戶數量要複雜得多),所以我們每天早上計算一次前一天的數據。 – James
一種方法是使用日曆表。您在創建時加入您的日曆表,結果是您的數據被放入適當的桶中。你可以把'DateType'放到日曆表中。 –