В таблице A есть вычисляемое поле с именем Computed1. Это persisted
и не ноль. Кроме того, он всегда вычисляется с выражением char (50). Он также уникален и имеет уникальное ключевое ограничение.
В таблице B есть поле RefersToComputed1, которое должно ссылаться на действительное значение Computed1.
Попытка создать ограничение внешнего ключа для B's RefersToComputed1, которое ссылается на A 'Computed1, приводит к следующей ошибке:
Error SQL01268: .Net SqlClient Data Provider: Msg 1753, Level 16, State 0, Line 1 Column
'B.RefersToComputed1' is not the same length or scale as referencing column 'A.Computed1' in
foreign key 'FK_B_A'. Columns participating in a foreign key relationship must be defined with
the same length and scale.
В: Почему создается эта ошибка? Нужны ли специальные меры для внешних ключей для вычисляемых столбцов, и если да, то каковы они?
Резюме:
- Конкретная проблема возникает из вычисляемых, основанных на символах, полей, являющихся varchar. Следовательно, Computed1 - это varchar (50), а не char (50).
- Лучше иметь приведение, окружающее вычисляемое выражение поля, чтобы принудительно преобразовать его в определенный тип. Кредит идет к Cade Roux за этот совет.