2014-02-21 78 views
0

我有以下表结构:如何解决“最大允许密钥长度为900字节”。

CREATE TABLE [dbo].[Signature] 
(
    [caption_id] [nvarchar](512) NOT NULL, 
    [signature_id] [int] NOT NULL 
) 

我想与下面的ALTER命令添加主键:

ALTER TABLE [dbo].[Signature] 
ADD CONSTRAINT [pk__signatures] 
PRIMARY KEY CLUSTERED ([caption_id] ASC,[signature_id] ASC); 

当执行上述alter命令,我收到以下错误:

Ms 1944,Level 16,State 1,Line 1 索引'pk__signatures'未创建。该索引的密钥长度至少为1028字节。最大允许密钥长度为900个字节。 消息1750,级别16,状态0,行1 无法创建约束。查看以前的错误。

任何人都可以帮助我解决这个问题吗?

+0

您想添加一个1024个+ 4字节长的密钥?这是疯狂。一般来说,使用varchar/nvarchar主键通常是个不错的主意。你为什么需要这个?你怎么了? – Luaan

+1

http://blogs.msdn.com/b/bartd/archive/2011/01/06/optionsforindexedlookupsoflongvalues.aspx –

+1

长度为512的ID对我来说似乎有点多。宽字符的使用不会使它变得更好。正如Luaan已经指出的那样:宽键效果不佳。你可以使用普通字符。这会给你一个516长度的关键。不漂亮但可行。或者添加一个包含您的ID的散列值的列。由于碰撞很少(具有良好的散列函数),您将保持唯一性属性,但具有可接受的密钥长度。 – Ronald

回答

相关问题