è possibile, ma non con un modo incorporato ho paura. Dovresti ricostruire manualmente la sequenza temporale.
Dato che le tabelle di tracciamento delle modifiche offrono il tran_end_time, che è il tempo in cui il valore della proprietà deve essere percepito come persistente, è necessario creare una query che recuperi tutti i periodi distinti degli stati della tabella, join on la proprietà tracciata cambia e quindi ruota (per avere una presentazione nella stessa forma della tabella). Non dimenticare di unione con lo stato della tabella stessa per ottenere i valori che non sono stati modificati/tracciati per completezza.
Il risultato finale, semplificato, dovrebbe assomigliare
RN PK PropA PropB FromDate ToDate
1 1 'Ver1' 'Ver1' 2012-01-01 09:00 2012-01-02 08:00
2 1 'Ver1' 'Ver2' 2012-01-02 08:00 2012-01-03 07:00
3 1 'Ver2' 'Ver2' 2012-01-03 07:00 *getdate()*
4 2 'Ver1' 'Ver1' 2012-01-01 05:00 2012-01-02 06:00
5 2 'Ver1' 'Ver2' 2012-01-02 06:00 2012-01-03 01:00
6 2 'Ver2' 'Ver2' 2012-01-03 01:00 *getdate()*
nota che il getdate() è valido se la riga non è stata eliminata nel qual caso deve essere sostituito dalla data delezione
MODIFICA, per i 2 casi d'uso. Il primo punto è facilmente indirizzata è una questione di costruire l'oggetto grafico temporale e quindi filtrando:
declare @pointInTime datetime = '20120102 10:00';
select * from Reconstructed_TG where FromDate <= @pointInTime and @pointInTime < ToDate
il secondo punto, possono essere generati facilmente con la clausola EXCEPT, come fai notare. dato query precedente:
declare @pointInTimeA datetime = '20120102 10:00';
declare @pointInTimeB datetime = '20120103 01:00';
select * from Reconstructed_TG where FromDate <= @pointInTimeA and @pointInTimeA < ToDate
EXCEPT
select * from Reconstructed_TG where FromDate <= @pointInTimeB and @pointInTimeB < ToDate
ancora la clausola except
presenta solo le righe che hanno almeno un valore di colonna diverso; non so se quell'informazione sia veramente significativa per l'occhio umano. A seconda delle esigenze, una query che funziona direttamente sui dati cdc
potrebbe essere più appropriata.
cosa vuoi dire che vuoi calcolare il diff? esempio di output? – Jaguar
@Jaguar: sono stati aggiunti due casi d'uso. Grazie! – Legend