![]() |
MSSQL : Funktion zum Vergleichen von nvarchar - Problem
Ich habe mir eine kleine Funktion gebastelt, die eigentlich funktioniert :roll:
Sie vergleicht 2 NVarchar Werte und gibt ein Bit als Ergebnis zurück
SQL-Code:
Jetzt zum "eigentlich"...
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 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:
-- ergibt: Marker = 0 obwohl das eine gültige User ID ist ...
Select Vorname, Name, Compare(ID,'{B273E8A2-F797-4C17-99CA-BC30F0B8FC09}') as 'Marker'
FROM User Test2:
SQL-Code:
-- ergibt: Marker = 1 , also kein Problem mit GUIDS
Select Vorname, Name, Compare(ID,ID) as 'Marker'
FROM User Test3:
SQL-Code:
-- ergibt: Marker = 1 , also kein Problem mit NVarchars
Select Vorname, Name, Compare('Piffel','piffel ') as 'Marker'
FROM User Test4:
SQL-Code:
-- ergibt: Marker = 0 , CONVERT liefert das selbe Ergebnis
Select Vorname, Name, Compare(CAST(ID as NVarchar(38)),
'{B273E8A2-F797-4C17-99CA-BC30F0B8FC09}') as 'Marker' FROM User 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 ? |
Re: MSSQL : Funktion zum Vergleichen von nvarchar - Problem
Warum benutzt du NVarchar ? Da spielt der eingestellte Zeichensatz eine große Rolle und deshalb geht es wohl auch nicht richtig. 8)
|
Re: MSSQL : Funktion zum Vergleichen von nvarchar - Problem
Habs grade mal mit Varchar probiert, das selbe Verhalten ...
|
Re: MSSQL : Funktion zum Vergleichen von nvarchar - Problem
Gefunden :wink:
Wenn man einen UniqueIdentifier in einen NVarchar bzw. VarChar Casted, dann werden dabei die Klammern entfernt.
SQL-Code:
Mist, das hat mich jetzt 5 Stunden aufgehalten. :wall:
CAST(ID as NVarchar(38))
-- sieht nicht so aus '{B273E8A2-F797-4C17-99CA-BC30F0B8FC09}' --sondern so ... 'B273E8A2-F797-4C17-99CA-BC30F0B8FC09' Die CompareStr Funktion habe ich jetzt so umgebaut ...
SQL-Code:
CREATE FUNCTION CompareStr (@Param1 NVarchar(100)='', @Param2 NVarchar(100)='')
RETURNS bit AS BEGIN -- Parameter auf geschweifte Klammern überprüfen und diese ggf. entfernen Set @Param1=REPLACE(@Param1,'{','') Set @Param1=REPLACE(@Param1,'}','') Set @Param2=REPLACE(@Param2,'{','') Set @Param2=REPLACE(@Param2,'}','') DECLARE @fn_result bit set @fn_Result=0 if RTRIM (UPPER (@Param1) ) = RTRIM (UPPER (@Param2) ) SET @fn_result=1 RETURN @fn_result END Schöne Grüße, Jens :hi: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:15 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz