При создании индекса SQL Server проверяет метаданные столбца.Максимальная длина индекса для SQL Server 2012 составляет 900 байт, а для SQL Server 2016 (1700 байт).
Для NVARCHAR(2000)
максимальный размер в байтах равен 4000, и он превышает максимальный предел индекса.
Create Table Test(Id Int primary key,ProdName Nvarchar(2000));
INSERT INTO Test VALUES (1, REPLICATE('0123456789',45));
Create index ix_Test ON Test(ProdName);
INSERT INTO Test VALUES (2, REPLICATE('0123456789',46));
-- Operation failed. The index entry of length 920 bytes for the index
--'ix_Test' exceeds the maximum length of 900 bytes.
db <> fiddle demo
Внимание!Максимальная длина ключа составляет 900 байт. Индекс 'ix_Test' имеет максимальную длину 4000 байт. Для некоторой комбинации больших значений операция вставки / обновления завершится неудачей.
Это означает, что внутри вашего столбца есть строковые значения, которые короче 450 символов (900 байт).
SELECT MAX(DATALENGTH(ProdName))
FROM Test;
-- should be lower than 900
Что касается второго вопроса, то будет использоваться индекс, пока условие SARGable :
SELECT *
FROM Test
WHERE ProductName = 'ABC' -- index usage;
SELECT *
FROM Test
WHERE ProductName = 'AB%'; -- index usage
SELECT *
FROM Test
WHERE ProductName LIKE '%B%'; -- no index seek, index/table scan instead