2010-05-07 13 views
13

Erstellen einer visuellen Einschränkung für ein Varchar (max) -Feld in Visual Studio.SQL Server-eindeutiges Einschränkungsproblem

das Problem ist, wenn ich es versuchen:

verwalten Indizes und Schlüssel> hinzufügen> Spalten

kann ich wählte nur die Bigint Spalten, aber keine der varchar (max) diejenigen.

Muss ich vielleicht verwenden überprüfen Einschränkungen?

Wenn ja, was in den Ausdruck zu setzen?

Thnx für die Info

Antwort

15

Sie keine eindeutige Einschränkung für eine VARCHAR(MAX) Spalte setzen können (die bis zu 2 GB Text sein könnte !!). Du kannst einfach nicht.

Die eindeutige Integritätsbedingung wird durch einen eindeutigen Index im Hintergrund erzwungen und SQL Server hat eine Obergrenze von 900 Byte für Indexeinträge. Sie können aus diesem Grund auch keine eindeutige Einschränkung für ein Feld VARCHAR(2000) setzen.

Sie müssen einen anderen Weg finden, um zu erreichen, was Sie versuchen zu tun. Sie könnten z.B. Berechnen Sie die Länge und etwas wie eine Prüfsumme über Ihren Text und legen Sie eine eindeutige Einschränkung für diese Spalten Länge und Prüfsumme fest.

+0

es sollte ein E-Mail-Feld sein. Was kann ich tun? verkürzen? – b0x0rz

+4

Ja, kürzen Sie es. 320 Zeichen ist die maximale Länge gemäß http://email.about.com/od/emailbehindthescenes/f/address_length.htm –

+7

Heiliger Mistmann, ein EMAIL-Feld? Ja, kürze es. Wenn jemand mir eine 2 GB lange E-Mail-Adresse zeigt, werde ich meine Wörter –

1

Selbst wenn dies möglich wäre, wäre es eine schlechte Idee.

1) Es gibt einen anderen Weg. Suchen Sie nach anderen Daten, die Sie als Ihre eigene Spalte verwenden möchten

2) Wenn Sie unbedingt VARCHAR (Max) verwenden müssen. Vielleicht hash es beim Einfügen/Aktualisieren und fügen Sie eine Hash-Spalte hinzu?

+0

Thnx für den Versuch zu helfen – b0x0rz

1

Eine Möglichkeit besteht darin, eine Spalte für einen Hash hinzuzufügen, der berechnet wird, wenn Sie die Spalte einfügen oder aktualisieren und einen eindeutigen Index darauf setzen. Während Hash-Kollisionen passieren, ist es extrem unwahrscheinlich.

Sie könnten dieses T-SQL-Schlüsselwort:

http://msdn.microsoft.com/en-us/library/ms174415.aspx

+0

Thnx für den Versuch zu helfen – b0x0rz