Ошибка при создании уникального кластеризованного индекса в 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)
Но я получаю ошибку
Столбец "Имя" в таблице "vWTotalsalesbyProduct" относится к типу, который недопустим для использования в качестве ключевого столбца в индексе.
Помоги мне решить это
1 ответ
Уникальное ограничение может содержать до 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 байт