2010-05-07 150 views
13

如何以可視方式在Visual Studio中的varchar(max)字段上創建唯一約束。SQL Server唯一約束問題

的問題是,當我嘗試:

管理索引和鍵>添加>列

我只能選擇了BIGINT列,但不是爲varchar(最大值)的人的任何。

我可能必須使用檢查限制

如果是的話,表達什麼?

日Thnx的信息

回答

15

你不能把一個VARCHAR(MAX)列的唯一約束(這可能是高達2 GB的文本!)。你根本不能。

唯一約束由後臺的唯一索引強制執行,SQL Server對索引條目有900字節限制。出於這個原因,您也不能在VARCHAR(2000)字段上設置唯一的限制。

你需要找到另一種方式來實現你想要做的事情。你可以例如計算長度和類似校驗和的內容,並對這些長度和校驗和列設置唯一的約束。

+0

它應該是電子郵件領域。我能做什麼?縮短它? – b0x0rz 2010-05-07 21:00:25

+4

是的,縮短它。 320字符是根據http://email.about.com/od/emailbehindthescenes/f/address_length.htm – 2010-05-07 21:01:52

+7

的最大長度聖潔的廢話的人,一個EMAIL領域?是的,縮短它。當有人向我展示一個2GB長的電子郵件地址時,我會吃我的話 – 2010-05-07 21:02:04

1

即使這是可能的,這將是一個壞主意。

1)還有另外一種方法。查找一些其他數據用作唯一列

2)如果您絕對必須使用varchar(Max)。也許哈希它插入/更新並添加哈希列?

+0

thnx試圖幫助 – b0x0rz 2010-05-07 21:14:29

1

做到這一點的一種方法是爲每當插入或更新列並在其上放置唯一索引時計算的散列添加一列。雖然散列衝突確實發生,但極其不可能。

你可以使用這個T-SQL關鍵字:

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

+0

thnx試圖幫助 – b0x0rz 2010-05-07 21:15:18