SQL Server - 如何跨多个列创建唯一约束,其中一列是VARCHAR

时间:2011-02-17 12:57:30

标签: sql sql-server

我需要能够创建一个唯一的约束来检查字符串和整数组合是否唯一。

我尝试过代码:

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

但我得到错误:

  

Ms 1919,Level 16,State 1,Line 1   表中的列'my_string_col'   'my_string_tbl'是一种类型   无效用作的关键列   指数。
  Msg 1750,Level 16,State 0,Line 1
  无法创建约束。   查看以前的错误。

如何创建我需要的约束?

2 个答案:

答案 0 :(得分:3)

它是:

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

在这种情况下,您可以根据值的哈希值添加计算列,并将其用于约束。

当然,如果你有text / ntext / image,那么这也会失败。因此,更改为SQL Server 2005引入的较新的varchar(max),nvarchar(max),varbinary(max)类型之一,并且哈希

答案 1 :(得分:2)

VARCHAR BIG 如何是你的专栏?

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