2011-02-17 89 views
2

我需要能够创建一个唯一约束来检查字符串和整数组合是否唯一。SQL Server - 如何跨多列创建唯一约束,其中一列是VARCHAR

我曾尝试代码:

ALTER TABLE mytable ADD CONSTRAINT 
constraint_Unique_ForeignID_MyString UNIQUE NONCLUSTERED 
(
    foreign_id, my_string_col 
) 

,但我得到的错误:

Msg 1919, Level 16, State 1, Line 1
Column 'my_string_col' in table 'my_string_tbl' is of a type that is invalid for use as a key column in an index.
Msg 1750, Level 16, State 0, Line 1
Could not create constraint. See previous errors.

如何创建我需要的约束?

+1

请给我们表定义吗? – gbn 2011-02-17 13:02:56

回答

2

如何BIGVARCHAR是你的专栏?

任何索引只能包含最多900字节列。没有办法绕过这个,或者将这个数字增加到更高的值。

+0

事实上,这只是域名,所以100或200个字符应该足够多。 – gb2d 2011-02-17 13:02:23

3

它要么:

  • 文本/ NTEXT /图像/ VARCHAR(最大值)/为nvarchar(最大)/ VARBINARY(最大值)/ XML
  • 太长> 900个字节

在在这种情况下,可以基于值的散列添加计算列,并将其用于约束。

当然,如果你有文本/ ntext /图像,那么这也会失败。因此,请改为使用SQL Server 2005引入的新varchar(max),nvarchar(max),varbinary(max)类型和散列表中的一个