2010-05-07 14 views
13

Cómo crear una restricción única en un campo varchar (max) en Visual Studio, visualmente.Problema de restricción único de SQL Server

el problema es cuando lo intento:

administrar índices y claves> Agregar> columnas

sólo puedo elegir las columnas BIGINT, pero no cualquiera de los varchar (max).

¿Tal vez tenga que usar ver las restricciones?

En caso afirmativo, ¿qué poner en la expresión?

Thnx por la información

Respuesta

15

No se puede poner una restricción única en una columna VARCHAR(MAX) (que podría ser de hasta 2 GB de texto !!). Simplemente no puedes.

La restricción única es impuesta por un índice único en segundo plano, y SQL Server tiene un límite de 900 bytes en las entradas de índice. Tampoco puede poner una restricción única en un campo VARCHAR(2000) por ese motivo.

Tendrá que encontrar otra manera de lograr lo que está tratando de hacer. Podría, por ejemplo, calcule la longitud y algo así como una suma de comprobación sobre su texto y aplique una restricción única a esas columnas de longitud y suma de comprobación.

+0

se supone que debe ser un campo de correo electrónico. ¿que puedo hacer? acortarlo? – b0x0rz

+4

Sí, acortarlo. 320 caracteres es la longitud máxima de acuerdo con http://email.about.com/od/emailbehindthescenes/f/address_length.htm –

+7

Holy crap man, un campo EMAIL? Sí, acortarlo. Cuando alguien me muestre una dirección de correo electrónico de 2GB de largo, comeré mis palabras –

1

Incluso si esto fuera posible, sería una mala idea.

1) Hay otra manera. Busque otros datos para usar como columna única

2) Si ABSOLUTAMENTE TIENE QUE usar varchar (Max). Tal vez hash en insertar/actualizar y agregar una columna hash?

+0

thnx por tratar de ayudar – b0x0rz

1

Una forma de hacer esto sería agregar una columna para un hash que se calcula cada vez que inserta o actualiza la columna y pone un índice único sobre eso. Si bien ocurren colisiones hash, es extremadamente poco probable.

usted podría utilizar esta palabra clave T-SQL:

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

+0

thnx por tratar de ayudar – b0x0rz

Cuestiones relacionadas