在SQL Server中创建唯一聚簇索引时出错

时间:2018-01-11 08:56:52

标签: sql-server view unique clustered-index

我想按名称在视图中创建唯一的聚簇索引。

这是我创建视图的方式

create view vWTotalsalesbyProduct
with schemabinding
as
    select 
        Name,
        Sum(Isnull(Unitprice * QuantitySold, 0)) as TotalSales,
        COUNT_BIG(*) as Totaltransation 
    from 
        dbo.product P 
    join
        dbo.tblproductcount C on P.productID = C.productID 
    group by 
        Name

enter image description here

这就是我创建唯一聚簇索引的方法

create unique clustered index UIX_vWTotalsalesbyProductName 
on vWTotalsalesbyProduct(Name)

但是我收到了错误

  

表'vWTotalsalesbyProduct'中的列'Name'的类型无效,无法用作索引中的键列。

帮我解决一下

1 个答案:

答案 0 :(得分:2)

Unique Constraint每行最多可容纳8000个字节。因此,如果列的最大长度允许存储超过8000个字节,则会出错。

CREATE TABLE dbo.Temp
(
    Name VARCHAR(901) UNIQUE
)

此代码给了我以下警告

  

警告!最大密钥长度为900字节。指数' UQ__Temp__737584F64FD1D5C8'最大长度为5000字节。对于某些大值组合,插入/更新操作将失败。

虽然这很好用

create TABLE dbo.Temp
(
    Name VARCHAR(900) UNIQUE
)

如果您使用VARCHAR(MAX)或NVARCHAR(MAX),您将收到此确切错误

create TABLE dbo.Temp
(
    Name VARCHAR(max) UNIQUE
)

enter image description here

因此,请确保列Name的最大允许大小小于900字节