我想按名称在视图中创建唯一的聚簇索引。
这是我创建视图的方式
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)
但是我收到了错误
表'vWTotalsalesbyProduct'中的列'Name'的类型无效,无法用作索引中的键列。
帮我解决一下
答案 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
)
因此,请确保列Name
的最大允许大小小于900字节