2016-07-28 8 views
1

Ich habe eine SQL Server-Tabelle, die eine Spalte userid des Typs uniqueidentifier enthält und der Spaltenwert ist 9EBC02CE-FA3A-4A62-A3B7-B9B6CFD33B7E.Konvertierung fehlgeschlagen Fehler für Uniqueidentifier in SQL-Abfrage

Wenn ich wie diese Abfrage:

WHERE userid = '9EBC02CE-FA3A-4A62-A3B7-B9B6CFD33B7E' 

Die Abfrage erfolgreich ausgeführt wird. Wenn ich am Ende des Strings zusätzliche Zeichen hinzufügen, ist es auch gut funktioniert wie unter

WHERE userid = '9EBC02CE-FA3A-4A62-A3B7-B9B6CFD33B7Eqweqweqwemmmmmmmmmm' 

Aber das Problem ist, wenn ich zusätzliche Zeichen bin Zugabe zu Beginn der Zeichenfolge der Abfrage Fehler angezeigt wird.

WHERE userid = 'A9EBC02CE-FA3A-4A62-A3B7-B9B6CFD33B7E' 

Das zeigt Fehler wie ausgefallen

Umwandlung, wenn sie von einer Zeichenfolge Umwandlung

Meine Frage ist, warum der Fehler beim Start der nur uniqueidentifier zeigt das Hinzufügen Zeichen Zeichenfolge und wie diesen Fehler in einer gespeicherten Prozedur zu verfolgen

+1

Diese [Antwort] (http://Stackoverflow.com/a/31876166/2451726) kann Ihnen helfen! – Arulkumar

+0

Dieser auch zusammen mit Kommentaren ... http: //stackoverflow.com/questions/1390109/convert-varchar-to-uniqueidentifier-in-sql-server – TheGameiswar

+4

Wenn Sie aufhören, Dinge als Strings zu übergeben, vermute ich, alles wird viel einfacher sein. Ihre gespeicherte Prozedur akzeptiert eine * Zeichenfolge *, wenn es eine eindeutige Kennung ist. Warum also nicht den Parametertyp? –

Antwort

1

Nach Microsoft-Dokumentation:

UNIQUE Der Typ ist ein Zeichentyp für die Zweck der Umwandlung von einem Zeichenausdruck betrachtet, und deshalb ist unterliegt den Regeln für Trunkierung zu einer Zeichenart umgewandelt wird. Das heißt, wenn Zeichenausdrücke in einen Zeichentyp Typ einer anderen Größe konvertiert werden, werden Werte, die für den neuen Typ Typ zu lang sind, abgeschnitten. Siehe den Abschnitt Beispiele.

Das erklärt, warum es funktioniert, wenn Sie Zeichen nach der 36. Position anhängen.

Wenn Sie Zeichen der GUID voranstellen, brechen Sie die Formatierungsregeln für die GUID, und die Konvertierung schlägt fehl.

In einer gespeicherten Prozedur können Sie die GUID mithilfe von TRY_CONVERT validieren. Es wird NULL zurückgeben, wenn die Konvertierung nicht möglich ist:

IF TRY_CONVERT(UNIQUEIDENTIFIER,@userId) IS NULL 
    BEGIN 
     .... report error ... 
    END 

TRY_CONVERT ist nur von SQL Server verfügbar 2012. Wenn Sie eine Zeichenfolge vor der Umwandlung in UNIQUE auf älteren Versionen validieren müssen, können Sie den folgenden Code verwenden:

IF NOT @userId LIKE REPLACE('00000000-0000-0000-0000-000000000000', '0', '[0-9a-fA-F]')+'%' 
    BEGIN 
      .... report error ... 
    END 
+3

'TRY_CONVERT' ist ein ** neues Feature ** in SQL Server ** 2012 **, also ist es nicht für das OP verfügbar, das SQL Server ** 2008 ** .... verwendet. –

+0

Ich habe die Antwort bearbeitet um SQL Server-Versionen vor 2012 abzudecken. –

Verwandte Themen