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 无法创建约束。查看以前的错误。
任何人都可以帮助我解决这个问题吗?
您想添加一个1024个+ 4字节长的密钥?这是疯狂。一般来说,使用varchar/nvarchar主键通常是个不错的主意。你为什么需要这个?你怎么了? – Luaan
http://blogs.msdn.com/b/bartd/archive/2011/01/06/optionsforindexedlookupsoflongvalues.aspx –
长度为512的ID对我来说似乎有点多。宽字符的使用不会使它变得更好。正如Luaan已经指出的那样:宽键效果不佳。你可以使用普通字符。这会给你一个516长度的关键。不漂亮但可行。或者添加一个包含您的ID的散列值的列。由于碰撞很少(具有良好的散列函数),您将保持唯一性属性,但具有可接受的密钥长度。 – Ronald