在 SQL 服务器的视图中创建唯一聚集索引时出错

Error while creating unique clustered index in view in SQL Server

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

这就是我创建视图的方式

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

这就是我创建唯一聚集索引的方式

create unique clustered index UIX_vWTotalsalesbyProductName 
on vWTotalsalesbyProduct(Name)

但是我得到一个错误

Column 'Name' in table 'vWTotalsalesbyProduct' is of a type that is invalid for use as a key column in an index.

帮我解决一下

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

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

这段代码给了我以下警告

Warning! The maximum key length is 900 bytes. The index 'UQ__Temp__737584F64FD1D5C8' has maximum length of 5000 bytes. For some combination of large values, the insert/update operation will fail.

虽然这很好用

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

如果您使用 VARCHAR(MAX) 或 NVARCHAR(MAX),您将得到这个确切的错误

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

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