Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 索引或主键的总大小不能超过900字节_Sql Server - Fatal编程技术网

Sql server 索引或主键的总大小不能超过900字节

Sql server 索引或主键的总大小不能超过900字节,sql-server,Sql Server,当我尝试为7列创建UK时,我得到 索引或主键的总大小 不能超过900字节 如何解决此错误?除了明显的(更改这7列的大小)之外,没有设置或类似设置。不过,您可以通过使用触发器来强制执行此操作,以确保这7列在一起是唯一的。这个问题是在2010年提出的。SQL Server 2016提高了非聚集索引的限制,因此可以选择升级 如果仍然需要在允许的限制范围内强制实施唯一约束,请参阅一些解决方法的建议 校验和(可能的冲突) 触发器(开销高,在快照隔离下可能会失败) HASHBYTES(冲突的可能性较小,但

当我尝试为7列创建UK时,我得到

索引或主键的总大小 不能超过900字节


如何解决此错误?

除了明显的(更改这7列的大小)之外,没有设置或类似设置。不过,您可以通过使用触发器来强制执行此操作,以确保这7列在一起是唯一的。

这个问题是在2010年提出的。SQL Server 2016提高了非聚集索引的限制,因此可以选择升级

如果仍然需要在允许的限制范围内强制实施唯一约束,请参阅一些解决方法的建议

  • 校验和(可能的冲突)
  • 触发器(开销高,在快照隔离下可能会失败)
  • HASHBYTES(冲突的可能性较小,但仍有可能)

如果您在SSMS中,将出现此错误,并且无法创建索引

但是,您可以编写脚本,相同的索引创建只会产生警告

警告!最大密钥长度为900字节。索引 “IX_成员_登录名”的最大长度为2000字节。对一些人来说 如果组合较大的值,则插入/更新操作将失败

剧本是

 CREATE NONCLUSTERED INDEX [IX_Members_LoginName] ON [dbo].[Members] 
 (
    [LoginName] ASC 
  )
 WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE =
 OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF,
 ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

非常简单:减小索引的大小。SQL Server中的索引项不能超过900字节,这是一个固定的硬限制。没办法。你能告诉我们你是如何创建唯一索引的吗??这个独特的索引涉及哪些字段???@marc_s From我不认为它是PK。@马丁·史密斯:谢谢你的提醒!