Вычисляем столбец как PK - PullRequest
1 голос
/ 06 мая 2011

У меня есть вычисляемый столбец, основанный на другом столбце, который я хочу использовать в качестве PK.Я настроил его таким образом, но при попытке создания внешних ключей он всегда утверждает, что мой PK имеет другую длину типа данных.PK устанавливается следующим образом: (право ('000000' + CONVERT (nvarchar, [CaseNumber], 0), (6))) ... если это не означает, что оно совпадает с другим полем, установленным наnvarchar (50)?

Я знаю, что могу просто удалить все свои отношения и использовать поле casenumber, которое является полем int (identity), но я бы не стал перекодировать все это.

1 Ответ

1 голос
/ 06 мая 2011

Нет.

Тип данных этого выражения nvarchar(6), поэтому вам нужно преобразовать выражение в nvarchar(50), чтобы избежать жалоб на несоответствие длин.

   DECLARE @v SQL_VARIANT =RIGHT('000000'+CONVERT([NVARCHAR](50),123,0),(6))

   SELECT    CAST(SQL_VARIANT_PROPERTY(@v, 'BaseType') AS VARCHAR(30)) AS BaseType,   
             CAST(SQL_VARIANT_PROPERTY(@v, 'MaxLength') AS INT) AS MaxLength 

Возвращает

BaseType                       MaxLength
------------------------------ -----------
nvarchar                       12

Это размер в байтах, поэтому разделите 12 на 2, чтобы получить количество символов Юникода.

...