2010-05-07 6 views
13

Come creare un vincolo univoco su un campo varchar (massimo) in Visual Studio, visivamente.Problema di vincolo univoco di SQL Server

il problema è quando lo provo:

gestisco indici e chiavi> Aggiungi> colonne

posso solo scelto le colonne bigint, ma non uno qualsiasi dei varchar (max) quelli.

Devo forse usare i limiti di controllo ?

Se sì, cosa mettere nell'espressione?

Thnx per le informazioni

risposta

15

Non si può mettere un vincolo univoco su una colonna VARCHAR(MAX) (che potrebbe essere fino a 2 GB di testo !!). Semplicemente non puoi.

Il vincolo univoco viene applicato da un indice univoco in background e SQL Server ha un limite di 900 byte sulle voci dell'indice. Non è inoltre possibile applicare un vincolo univoco su un campo VARCHAR(2000) per questo motivo.

Dovrai trovare un altro modo per ottenere ciò che stai cercando di fare. Potresti ad es. calcola la lunghezza e qualcosa come un checksum sul tuo testo e metti un vincolo univoco su quelle colonne lunghezza e checksum.

+0

si suppone essere un campo di posta elettronica. cosa posso fare? accorciarlo? – b0x0rz

+4

Sì, abbreviare. 320 caratteri è la lunghezza massima in base a http://email.about.com/od/emailbehindthescenes/f/address_length.htm –

+7

Holy Crap Man, un campo EMAIL? Sì, abbreviare. Quando qualcuno mi mostra un indirizzo e-mail lungo 2 GB, mangerò le mie parole –

1

Anche se fosse possibile, sarebbe una cattiva idea.

1) C'è un altro modo. Trova altri dati da utilizzare come colonna unica

2) Se si DEVE ASSOLUTAMENTE utilizzare il varchar (Max). Forse hash su inserire/aggiornare e aggiungere una colonna hash?

+0

thnx per aver provato ad aiutare – b0x0rz

1

Un modo per farlo sarebbe quello di aggiungere una colonna per un hash che viene calcolato ogni volta che si inserisce o aggiorna la colonna e si inserisce un indice univoco su quello. Mentre le collisioni di hash si verificano, è improbabile estremamente.

si potrebbe usare questa parola chiave T-SQL:

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

+0

thnx per aver provato ad aiutare – b0x0rz