2013-12-23 8 views
5

Ich hatte youtube Video-Tutorial sehen lehren, wie einzigartigWie wird ein eindeutiger Schlüssel für eine varchar-Spalte für die Entity Framework-Datenbank erstellt?

http://www.youtube.com/watch?v=oqrsfatxTYE&list=PL08903FB7ACA1C2FB&index=9

Im Video Schlüssel erstellen, er einen eindeutigen Schlüssel für E-Mail (nvarchar) Spalte erstellt hat, habe ich es schaffen könnte, wenn ich Datenbank manuell erstellen, aber wenn ich versuche, eine Datenbank eindeutige Schlüssel erstellen Sie zunächst mit Entity Framework Code erstellt, um die nächste Abfrage mit

ALTER TABLE Peoples 
    ADD CONSTRAINT UQ_MyTable_Email UNIQUE (email) 

Es wird einen Fehler erzeugen:

Msg 1919, Level 16, State 1, Line 2 
Column 'email' in table 'Peoples' is of a type that is invalid for use as a key column in an index. 

Was ist ein Problem? Was kann ich tun, um einen eindeutigen Schlüssel für die Spalte nvarchar (max) zu erstellen?

+0

Was ist für Sie die Datenlänge conlumn E-Mail ?? –

+0

ist eine nvarchar (max) -Spalte – Lai32290

+2

Hier geht es, 1. Sie können keine Idexe in einer VARCHAR (MAX) -Spalte erstellen, wenn Sie eine Unique-Einschränkung erstellen, erstellen Sie hinter den Kulissen tatsächlich einen nicht gruppierten eindeutigen Index. Sie müssen Ihren Datentyp ändern und sehen meine Antwort für weitere Details. –

Antwort

7

sagen Wenn Sie diese Tabelle erstellen

CREATE TABLE ConstTable 
(ID INT, 
Email VARCHAR(1000) 
CONSTRAINT uc_Email UNIQUE (Email) 
) 
GO 

Sie eine Warnung erhalten:

Warning! The maximum key length is 900 bytes. The index 'uc_Email' has maximum length of 1000 bytes. For some combination of large values, the insert/update operation will fail

Ihre Spalte auf dem Sie eine eindeutige Einschränkung definieren wollen, sollten dann oder gleich 900 Byte weniger , so können Sie eine VARCHAR(900) oder NVARCHAR(450) Spalte haben, wenn Sie in der Lage sein möchten, eine eindeutige Einschränkung für diese Spalte zu erstellen

Gleiche Tabelle a bove mit VARCHAR (450) wird ohne Warnung erstellt

CREATE TABLE ConstTable 
(ID INT, 
Email VARCHAR(900) 
CONSTRAINT uc_Email UNIQUE (Email) 
) 
GO 

Ergebnis

Command(s) completed successfully.

Test für Ihre Tabelle

sagen, dass dies Tisch

CREATE TABLE ConstTable 
(ID INT, 
Email VARCHAR(MAX) 
) 
GO 

ist Versuche es jetzt Erstellen Sie einen beliebigen Index für den Datentyp VARCHAR (MAX), und Sie erhalten den gleichen Fehler.

CREATE INDEX ix_SomeIdex 
ON ConstTable (Email) 

Fehlermeldung

Msg 1919, Level 16, State 1, Line 1 Column 'Email' in table 'ConstTable' is of a type that is invalid for use as a key column in an index.

Verwandte Themen