我有以下表格:T-SQL通過RelevanceDate
1) TBL (ID, Data, LastUpdated, DateCreated)
2) TBL_LOG(Log_ID, LogCreateDate, ID, Data, LastUpdated, DateCreated)
TBL
用於存儲當前的數據和用於存儲在TBL
數據的每一次變化TBL_LOG
(使用更新觸發,從TBL
刪除的記錄複製到TBL_LOG
)。
現在我需要通過相關日期檢索數據。
我如何編寫表值函數(或其他替代函數),它將根據RelevanceDate
返回數據。
我理解的邏輯,但我不能找到它寫在SQL一個好辦法...
的邏輯是這樣的:
@RelevanceDate = '2011-03-01'
IF TBL.LastUpdated <= @RelevanceDate THEN return data from TBL
ELSE IF Exists data in TBL_LOG where TBL_LOG.LastUpdated <= @RelevanceDate
THEN return most resent data from TBL_LOG where TBL_LOG.LastUpdated <= @RelevanceDate
ELSE IF Exists data in TBL_LOG where TBL_LOG.LastUpdated > @RelevanceDate
THEN return the oldest data from TBL_LOG.LastUpdated > @RelevanceDate
ELSE return data from TBL
該函數將返回使用上面的邏輯數據,對於TBL
中的所有記錄。
簡而言之,對於TBL中的每一行,我需要關於「RelevanceDate」的數據。
您的兩個'ELSE IF'塊具有相同的條件:'在TBL_LOG中存在數據,其中TBL_LOG.LastUpdated <@RelevanceDat e' – MatBailie 2012-03-19 13:32:07
我更新了表達式,謝謝。 – 2012-03-19 13:38:15
將所有內容存儲在TBL_LOG中,然後您只需查詢TBL_LOG。基本上在TBL的INSERT和UPDATE中將觸發器插入到TBL_LOG中。如果您添加「操作」列,您甚至可以存儲刪除。至於你的查詢,我不知道你在做什麼,可能用英文解釋,而不是在你的代碼片段中,你在做什麼。您可能需要聯合TBL表查詢並查詢TBL_LOG。 – 2012-03-19 13:40:05