В SQL Server есть ограничение (до 2008 R2), что varchar (MAX) и nvarchar (MAX) (и некоторые другие типы, такие как text, ntext) не могут использоваться в индексах. У вас есть 2 варианта:
1. Установите ограниченный размер в поле ключа ex. NVARCHAR (100)
2. Создайте проверочное ограничение, которое сравнивает значение со всеми ключами в таблице.
Состояние:
([dbo].[CheckKey]([key])=(1))
и [dbo]. [CheckKey] является скалярной функцией, определенной как:
CREATE FUNCTION [dbo].[CheckKey]
(
@key nvarchar(max)
)
RETURNS bit
AS
BEGIN
declare @res bit
if exists(select * from key_value where [key] = @key)
set @res = 0
else
set @res = 1
return @res
END
Но обратите внимание, что собственный индекс более производительный, чем проверочное ограничение, поэтому, если вы действительно не можете указать длину, не используйте проверочное ограничение.