Vergleiche Varchar und UniqueIdentifier

8

Aufgrund einer ziemlich brillanten Übersicht in meinem aktuellen Projekt, haben wir einige Guids in einer varchar-Spalte in einer Tabelle gespeichert, die mit einer uniqueidentifier-Spalte in einer anderen verglichen werden müssen.

Wie kann ich das tun? SQL Server sagt einfach, dass es nicht von einer Zeichenkette in eine uniqueidentifier umwandeln kann.

    
Ed James 10.08.2009, 18:15
quelle

4 Antworten

15

Wenn SQL beschwert, dass es nicht umwandeln kann, bedeutet das, dass Sie nicht nur den eindeutigen Namen als varchar gespeichert haben, sondern auch ein anderes Format als SQL Server (zB haben Sie '{' und '}' hinzugefügt). SQL ist in der Lage, bei richtiger Formatierung eine Zeichenfolge an uniqueidentifier zu übergeben:

%Vor%

Je nachdem, wie Sie den uniqueidentifier wirklich gespeichert haben, werden Sie höchstwahrscheinlich die Daten und den Code an das SQL-Format (no {}) angepasst haben.

    
Remus Rusanu 10.08.2009, 18:23
quelle
5

Konvertiere den uniqueidentifier in varchar:

%Vor%     
K.A.D. 10.08.2009 18:20
quelle
4

Ich habe gerade das folgende Testskript ausgearbeitet:

%Vor%

Wird in einem SSMS-Fenster oder über die Datei slqcmd -i ausgeführt, die Ergebnisse sind die gleichen - SQL (2005) führt eine implizite Konvertierung durch. Dies unterstützt, was ich von SQL 2000 erinnere, als ich vor Jahren ein ähnliches Problem hatte.

Entscheidend ist, dass die varchar-Zeichenfolge dem guid-Muster entsprechen muss:

  • 8 Hexadezimalziffern
  • Bindestrich
  • 4 Hexadezimalziffern
  • Bindestrich
  • 4 Hexadezimalziffern
  • Bindestrich
  • 4 Hexadezimalziffern
  • Bindestrich
  • 12 Hexadezimalziffern
Philip Kelley 10.08.2009 18:29
quelle
1

Sie müssen den anderen eindeutigen Identifikator auf varchar anwenden.

SQL Server versucht wahrscheinlich, Dinge wie "bob" in uniqueidentifier zu schreiben, und es schlägt fehl. Laut CAST / CONVERT ist es erlaubt, also müssen es die Werte sein die varchar-Spalte.

    
gbn 10.08.2009 18:22
quelle

Tags und Links