MSSQL: Zwei Listen vergleichen


roddy1984

Grünschnabel
Hallo zusammen!

Ich muss innerhalb meines Programmes zwei Listen mithilfe von MSSQL vergleichen. Dabei habe ich eine Große-Mapping-Tabelle, in der in etwa so etwas drinsteht:

Code:
A_ID | B_ID
------------
1    | 1
1    | 2
2    | 1
2    | 2


In diesem Fall wären die Listen A=1 und B=2 identisch. Ich möchte nun identische Listen herausfinden. Mein erster Ansatz war anhand von CHECKSUM_AGG zu vergleichen:

SELECT A_ID, CHECKSUM_AGG(B_ID) AS ChkSum FROM BeispielTabelle GROUP BY A_ID

Dabei kommt nun in diesem trivialen Beispiel das folgende heraus:

Code:
A_ID | ChkSum
--------------
1    | 3
2    | 3


Ich habe also beide Listen verglichen und herausgefunden, dass beide gleich sind. Problem gelöst - könnte man meinen. Allerdings ist die CHECKSUM_AGG() Funktion nicht zuverlässig genug. Ich habe es (dummerweise) geschafft, zwei Listen zu erstellen, die unterschiedlich sind, aber identische Ergebnisse bei der CHECKSUM_AGG() Funktion haben.

Die MSSQL-Hilfe erklärt mir hierzu: "Wenn sich einer der Werte in der Liste mit Ausdrücken ändert, ändert sich gewöhnlich auch die Prüfsumme der Liste. Es besteht jedoch eine geringe Möglichkeit, dass sich die Prüfsumme nicht ändert. Aus diesem Grund wird nicht empfohlen, CHECKSUM für die Überprüfung auf geänderte Werte zu verwenden, außer es spielt für die Anwendung keine große Rolle, wenn gelegentlich eine Änderung nicht erkannt wird. Möglicherweise sollten Sie stattdessen HashBytes verwenden. Wenn ein MD5-Hashalgorithmus angegeben wird, ist die Wahrscheinlichkeit, dass HashBytes für zwei verschiedene Eingaben dasselbe Ergebnis zurückgibt, wesentlich geringer als bei CHECKSUM."

Soweit so gut, nun würde ich also gerne HashByte() anstelle von CHECKSUM() verwenden. Allerdings habe ich ja nicht genau einen Wert, sondern eine Liste von Werten. Also benötige ich eine Aggregatfunktion die für 2 verschiedene Listen sicher zwei verschiedene Ergebnisse herausbringt (eine Gödelisierung). Daher meine Fragen:

- Kennt jemand eine Gödelisierungsfunktion die bereits in MSSQL enthalten ist?
- Kennt jemand eine Stored Procedure die eine Gödelisierung in MSSQL vornimmt, die frei verwendbar ist?
- Gibt es für HashByte() ebenfalls eine aggregierte Funktion? (so wie CHECKSUM_AGG() für CHECKSUM() - nur eben für HashByte())

Vielen Dank für eure Hilfe!
 

Neue Beiträge