Ich habe mir eine kleine Funktion gebastelt, die eigentlich funktioniert
Sie vergleicht 2 NVarchar Werte und gibt ein Bit als Ergebnis zurück
SQL-Code:
CREATE FUNCTION Compare (@Param1 nvarchar(100)='',@Param2 nvarchar(100)='')
RETURNS bit
AS
BEGIN
DECLARE @fn_result bit
set @fn_Result=0
if RTRIM (UPPER (@Param1) ) = RTRIM (UPPER (@Param2) ) SET @fn_result=1
RETURN @fn_result
END
Jetzt zum "eigentlich"...
Einige meiner Tabellen haben UniqueIdentifier als Primary Keys.
Vereinfachtes Bespiel:
SQL-Code:
User
ID UniqueIdentifier
Name NVarchar(30)
Vorname NVarchar(10)
Adressen
ID UniqueIdentifier
ID_User NVarchar(38)
Strasse NVarchar(30)
PLZ NVarchar(5)
Ort NVarchar(30)
Test1:
SQL-Code:
Select Vorname, Name, Compare(ID,'{B273E8A2-F797-4C17-99CA-BC30F0B8FC09}') as 'Marker'
FROM User
-- ergibt: Marker = 0 obwohl das eine gültige User ID ist ...
Test2:
SQL-Code:
Select Vorname, Name, Compare(ID,ID) as 'Marker'
FROM User
-- ergibt: Marker = 1 , also kein Problem mit GUIDS
Test3:
SQL-Code:
Select Vorname, Name, Compare('Piffel','piffel ') as 'Marker'
FROM User
-- ergibt: Marker = 1 , also kein Problem mit NVarchars
Test4:
SQL-Code:
Select Vorname, Name, Compare(CAST(ID as NVarchar(38)),
'{B273E8A2-F797-4C17-99CA-BC30F0B8FC09}') as 'Marker'
FROM User
-- ergibt: Marker = 0 , CONVERT liefert das selbe Ergebnis
Warum verflixt funktionieren Test 1 und Test 4 nicht ?
Joins zwischen User und Adressen funktionieren ja auch, obwohl User.ID vom Typ
GUID und Adressen.ID_User vom Typ NVarchar ist.
Ich finde keine sinnvolle Erklärung. Fällt Euch dazu was ein ?