Ich verwende Microsoft SQL Server 2008 R2 (mit dem neuesten Service Pack / Patches) und die Datenbanksortierung ist SQL_Latin1_General_CP1_CI_AS.
Der folgende Code:
%Vor%führt zu folgenden Ergebnissen:
(1 Zeile (n) betroffen)
Msg 2601, Ebene 14, Status 1, Zeile 8
Kann keine doppelte Schlüsselzeile im Objekt 'dbo.Test' mit dem eindeutigen Index 'UniqueIndex' einfügen. Der doppelte Schlüsselwert ist (Beispiel).
Die Anweisung wurde beendet.
------------
& gt; Beispiel & lt;
(1 Zeile (n) betroffen)
Meine Fragen sind:
Jede Hilfe / ein Zeiger in die richtige Richtung wäre willkommen. Danke.
SQL Server folgt der ANSI / ISO SQL-92-Spezifikation (Abschnitt 8.2, , Allgemeine Regeln # 3) zum Vergleichen von Strings mit Leerzeichen. Der ANSI-Standard erfordert Auffüllen für das Zeichen Zeichenfolgen, die in Vergleichen verwendet werden, damit ihre Längen vorher übereinstimmen Vergleiche sie. Das Auffüllen wirkt sich direkt auf die Semantik von WHERE aus und HAVING-Klausel Prädikate und andere Transact-SQL-Zeichenfolge Vergleiche. Zum Beispiel berücksichtigt Transact-SQL die Zeichenfolgen 'abc' und 'abc' ist für die meisten Vergleichsoperationen gleichwertig.
Die einzige Ausnahme von dieser Regel ist das LIKE-Prädikat. Wenn das Recht Die Seite eines LIKE-Prädikatausdrucks enthält einen Wert mit einem nachfolgenden Wert Speicherplatz füllt SQL Server die zwei Werte nicht auf die gleiche Länge bevor der Vergleich stattfindet. Weil der Zweck des LIKE Prädikat, per definitionem, ist eher die Suche nach Mustern als einfache String-Gleichheit Tests, dies verletzt nicht den Abschnitt der ANSI SQL-92-Spezifikation, die bereits erwähnt wurde.
Hier ist ein bekanntes Beispiel für alle oben genannten Fälle:
%Vor% Hier finden Sie weitere Details zu abschließenden Leerzeichen und der LIKE
-Klausel .
Betreffende Indizes:
Ein Einfügen in eine Spalte, deren Werte eindeutig sein müssen, schlägt fehl, wenn Sie einen Wert angeben, der von vorhandenen Werten durch unterscheidet nur nachstehende Leerzeichen. Die folgenden Strings werden alle berücksichtigt gleichbedeutend mit einer eindeutigen Integritätsbedingung, einem Primärschlüssel oder einem eindeutigen Index. Ebenso, wenn Sie eine vorhandene Tabelle mit den Daten unten haben und versuchen Sie es fügen Sie eine eindeutige Einschränkung hinzu, es wird fehlschlagen, weil die Werte sind als identisch angesehen.
%Vor%
(Aus hier .)
Tags und Links sql-server tsql string-comparison unique-index