修复:无法在具有具有两个或更多位列的聚集索引的表上创建压缩的非聚集索引

应用对象
SQL Server 2008 R2 Service Pack 2 SQL Server 2008 R2 Developer SQL Server 2008 R2 Enterprise SQL Server 2008 R2 Standard

症状

请考虑以下情形:

  • 在 Microsoft SQL Server 2008 R2 中,有一个表具有两个或多个位数据类型列。
  • 创建表上包含两个或多个位数据类型列的聚集索引。
  • 在任何列上创建非聚集索引,并指定 DATA_COMPRESSION 选项。

在这种情况下,你会收到以下错误:

注意

消息 1944,级别 16,状态 1,行 <号>

未创建索引“<索引名称>”。 该索引的键长度至少为 -<Length> 字节。 允许的最大密钥长度为 <长度> 字节。

原因

出现此问题的原因是,在此方案中未正确计算位数据类型列的空间要求。

解决方法

此问题已首先在 SQL Server 的以下累积更新中修复。

SQL Server 2008 R2 SP2 的累积更新 13 /en-us/help/2967540

关于 SQL Server 的累积更新

SQL Server 的每个新累积更新都包含上一个累积更新中包含的所有修补程序和所有安全修补程序。 查看 SQL Server 的最新累积更新:

      

解决方法

要解决此问题,请将列的数据类型从 bit 更改为 tinyint。

状态

Microsoft 已确认在 "适用于" 部分中所列的 Microsoft 产品中存在问题。