AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi MSSQL : Funktion zum Vergleichen von nvarchar - Problem

MSSQL : Funktion zum Vergleichen von nvarchar - Problem

Ein Thema von jensw_2000 · begonnen am 9. Jan 2005 · letzter Beitrag vom 9. Jan 2005
Antwort Antwort
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
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#2

Re: MSSQL : Funktion zum Vergleichen von nvarchar - Problem

  Alt 9. Jan 2005, 03:31
Warum benutzt du NVarchar ? Da spielt der eingestellte Zeichensatz eine große Rolle und deshalb geht es wohl auch nicht richtig. 8)
Gruß
Hansa
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#3

Re: MSSQL : Funktion zum Vergleichen von nvarchar - Problem

  Alt 9. Jan 2005, 10:14
Habs grade mal mit Varchar probiert, das selbe Verhalten ...
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#4

Re: MSSQL : Funktion zum Vergleichen von nvarchar - Problem

  Alt 9. Jan 2005, 11:08
Gefunden

Wenn man einen UniqueIdentifier in einen NVarchar bzw. VarChar Casted, dann werden dabei die Klammern entfernt.

SQL-Code:
CAST(ID as NVarchar(38))
 -- sieht nicht so aus '{B273E8A2-F797-4C17-99CA-BC30F0B8FC09}'
 --sondern so ... 'B273E8A2-F797-4C17-99CA-BC30F0B8FC09'
Mist, das hat mich jetzt 5 Stunden aufgehalten.

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

  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz