在 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 字节
我想按名称在视图中创建唯一聚集索引。
这就是我创建视图的方式
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 字节