Ошибка при создании уникального кластеризованного индекса в 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 байт

Другие вопросы по тегам