【问题标题】:Column has a data type that cannot participate in a columnstore index列具有无法参与列存储索引的数据类型
【发布时间】:2018-08-28 03:51:09
【问题描述】:

我想使用以下查询在表中创建聚集列存储索引:

CREATE CLUSTERED COLUMNSTORE INDEX cci
ON agl_20180319_bck

我收到了这个错误:

消息 35343,第 16 级,状态 1,第 6 行
声明失败。列“memberOf”的数据类型不能参与列存储索引。省略列“memberOf”。

“memberOf”属于这种类型:memberOf nvarchar(max)

如何克服/忽略这个错误,它是什么意思?

【问题讨论】:

    标签: sql-server tsql columnstore


    【解决方案1】:

    根据documentation

    使用以下任何数据类型的列不能包含在 列存储索引:

    nvarchar(max)、varchar(max) 和 varbinary(max)(适用于 SQL Server 2016 及之前的版本,以及非聚集列存储索引)

    要么更改列的类型(如果可以),要么在此特定列上没有列存储索引。

    【讨论】:

    • 这意味着我必须创建一个非聚集列存储索引?
    • 不,这意味着您根本无法在该列上创建列存储索引。您可以尝试将类型从 nvarchar(max) 更改为限制它,例如将长度设置为 4000。然后您可以在其上创建列存储索引。
    【解决方案2】:

    您需要单独指定参与的列,不包括 memberOf 和任何其他不能在 columnStore 索引中使用的列

    【讨论】:

    • 我尝试了您的建议并收到以下消息:语句失败,因为在创建聚集列存储索引时不允许指定键列表。在不指定键列表的情况下创建聚集列存储索引。
    • CREATE CLUSTERED COLUMNSTORE INDEX cci ON algtable_20180319_bck (displayname, alias, firstname, lastname, exaddress)
    【解决方案3】:

    只需指定 varchar 变量的长度,而不是使用最大值。对我有用!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-03
      • 2014-08-21
      • 2013-12-17
      • 2015-10-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多