Einzelnen Beitrag anzeigen

jensw_2000
(Gast)

n/a Beiträge
 
#1

MSSQL : Funktion zum Vergleichen von nvarchar - Problem

  Alt 9. Jan 2005, 03:07
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 ?
  Mit Zitat antworten Zitat