Announcement

Collapse
No announcement yet.

Convert-Problem von varchar nach uniqueidentifier

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Convert-Problem von varchar nach uniqueidentifier

    Zur Benutzerregistierung lasse ich mir mit NEWID() eine uniqueidentifier erstellen und verschicke sie per eMail als link.
    Zur Bestätigung bekomme ich diese als varchar übergeben und möchte diese mit dem Wert in der Datenbank vergleichen.
    Durch Benutzerfehler kann es vorkommen, dass der RegKey nicht mehr gültig ist, d.h. dort unerlaubte Zeichen enthalten sind, dann kommt es bei

    Code:
    select @regkey_intern = cast(@@RegKey AS uniqueidentifier);
    oder

    Code:
    select @regkey_intern = convert(uniqueidentifier,@@RegKey);
    zu einer DB-Internen Fehlermeldung:


    Server: Nachr.-Nr. 8169, Schweregrad 16, Status 2, Prozedur reg_BestaetigungLieferant, Zeile 41
    Syntaxfehler beim Konvertieren einer Zeichenfolge in uniqueidentifier.




    , wobei @regkey_intern vom Typ uniqueidentifier ist und @@RegKey vom Typ varchar(40).


    Leider habe ich noch keine Möglichkeit gefunden diesen Fehler abzufangen. Wer kann helfen?

    LG der ThomasD

  • #2
    Lösung gefunden bzw erarbeitet

    So, habe mir zur Lösung des Problems eine folgende Funktion geschrieben:

    Code:
    CREATE   FUNCTION dbo.isUniqueIdentifier (@@TEXT varchar(256))
    RETURNS bit AS  
    BEGIN 
    	declare @count int; set @count = 0;
    	declare @hex varchar(16); set @hex = '0123456789ABCDEF';
    
    	-- hat der String die Richtige Länge?
    	if LEN(@@TEXT) <> 36 return 0;
    	-- alle Zeichen überprüfen
    	while (@count < LEN(@@TEXT))
    	begin
    		set @count = @count + 1;	-- eins raufzählen
    		if (@count in (9,14,19,24)) begin
    			if (SUBSTRING(@@TEXT, @count, 1) <> '-') return 0;
    			continue; 
    		end;
    		if CHARINDEX(SUBSTRING(@@TEXT, @count, 1), @hex) = 0 return 0;
    	end;
    	
    	return 1;
    END
    Überprüft Zeichenfolgenkonstanten, die in folgender Form vorliegt:
    xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx, wobei x für eine hexadezimale
    Ziffer zwischen 0 und 9 oder zwischen a und f steht.
    Beispielsweise ist 6F9619FF-8B86-D011-B42D-00C04FC964FF ein gültiger uniqueidentifier-Wert.


    LG der ThomasD

    Comment


    • #3
      oder so (ohne Schleifen)
      Code:
      CREATE   FUNCTION dbo.IsGuid (@@TEXT varchar(256))
      RETURNS bit AS  
      BEGIN 
       RETURN 
         CASE 
           WHEN @@TEXT
                LIKE replicate('[0-9abcdefABCDEF]', 8) + '-' +
                     replicate('[0-9abcdefABCDEF]', 4) + '-' +
                     replicate('[0-9abcdefABCDEF]', 4) + '-' +
                     replicate('[0-9abcdefABCDEF]', 4) + '-' +
                     replicate('[0-9abcdefABCDEF]', 12)
           THEN 1
           ELSE 0
         END
      END
      Gruß
      Ralf

      Comment

      Working...
      X