Datensätze auf Unterschiede vergleichen

26/03/2009 - 13:14 von Thomas Schremser | Report spam
Hallo allerseits!

In einer Tabelle protokolliere ich via Trigger Inserts und Updates aus einer
anderen Tabelle. Nun möchte ich alle Datensàtze aus dieser Tabelle haben,
bei denen sich tatsàchlich Daten geàndert haben. Weil einige meiner
Datenfelder NULL sein dürfen, kann ich alten und neuen Wert ja nicht direkt
vergleichen, deshalb hab' ich das derzeit so gelöst, daß ich aus allen
relevanten Feldern eines Datensatzes einen String erstelle und diesen dann
vergleiche:

SELECT
*
FROM
Protokoll I
LEFT OUTER JOIN Protokoll D
ON D.PersonID = I.PersonID
AND ...
WHERE
(
D.PersonID IS NULL -- Neuanlage
OR
(
COALESCE(CAST(I.Status AS varchar), '') +
COALESCE(CAST(I.EntryBI AS varchar), '') +
COALESCE(CAST(I.EntryAgeBI AS varchar), '') +
COALESCE(CAST(I.ExitBI AS varchar), '') +
COALESCE(CAST(I.ShowExitBI AS varchar), '') +
COALESCE(CAST(I.EntrySI AS varchar), '') +
COALESCE(CAST(I.EntryAgeSI AS varchar), '') +
COALESCE(CAST(I.ExitSI AS varchar), '') +
COALESCE(CAST(I.ShowExitSI AS varchar), '') +
COALESCE(CAST(I.MaxEntrySI AS varchar), '') +
COALESCE(CAST(I.Transferred AS varchar), '')
! COALESCE(CAST(D.Status AS varchar), '') +
COALESCE(CAST(D.EntryBI AS varchar), '') +
COALESCE(CAST(D.EntryAgeBI AS varchar), '') +
COALESCE(CAST(D.ExitBI AS varchar), '') +
COALESCE(CAST(D.ShowExitBI AS varchar), '') +
COALESCE(CAST(D.EntrySI AS varchar), '') +
COALESCE(CAST(D.EntryAgeSI AS varchar), '') +
COALESCE(CAST(D.ExitSI AS varchar), '') +
COALESCE(CAST(D.ShowExitSI AS varchar), '') +
COALESCE(CAST(D.MaxEntrySI AS varchar), '') +
COALESCE(CAST(D.Transferred AS varchar), '')
)
)

Das funktioniert so weit auch ganz gut, aber ich frage mich, ob das nicht
auch irgendwie eleganter bzw. einfacher geht. Hat jemand dazu eine Idee?

TIA

Grüße
Thomas

Any problem in computer science can be solved with another layer
of indirection. But that usually will create another problem.
David Wheeler
 

Lesen sie die antworten

#1 Stefan Hoffmann
26/03/2009 - 13:40 | Warnen spam
hallo Thomas,

Thomas Schremser schrieb:
In einer Tabelle protokolliere ich via Trigger Inserts und Updates aus einer
anderen Tabelle. Nun möchte ich alle Datensàtze aus dieser Tabelle haben,
bei denen sich tatsàchlich Daten geàndert haben.


Warum protokollierst du diese "Nicht-"Änderungen?

Das funktioniert so weit auch ganz gut, aber ich frage mich, ob das nicht
auch irgendwie eleganter bzw. einfacher geht. Hat jemand dazu eine Idee?



http://msdn.microsoft.com/en-us/lib...89788.aspx


mfG

Ähnliche fragen