Таблица A имеет вычисленное поле по имени Computed1. Это persisted
и не пустой. Кроме того, это всегда вычисляет к выражению, которое является символом (50). Это также уникально и имеет ограничение уникального ключа на него.
Таблица B имеет поле RefersToComputed1, которое должно относиться к допустимому значению Computed1.
Попытка создать ограничение внешнего ключа на B RefersToComputed1, который ссылается на' 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.
Q: Почему эта ошибка создается? Там специальные меры необходимы для внешних ключей для вычисляемых столбцов, и раз так каковы они?
Сводка:
Вычисляемое поле состоит из char (M), char (N) и т. Д. on, что в сумме дает M + N + .. = 50, но само вычисляемое поле - это varchar (50). Изменение RefersToComputed1 на varchar (50) вместо char (50) решает проблему.
Внешние ключи вычисляемых полей не требуют специальной обработки (хотя может потребоваться сохранение в вычисляемом столбце).
Является ли RefersToComputed1
точно таким же типом данных, длиной и сопоставлением, что и Computed1
?
Дважды проверьте это ... например, вам нужен последний CAST или COLLATE на Computed1
, чтобы убедиться, что это именно то, что вы ожидаете? Я говорю это, потому что ошибка говорит о том, что 2 столбца разные
Edit: char и varchar не являются идентичными типами данных, поэтому вам понадобится CAST, чтобы изменить их
Является ли RefersToComputed1
первичным ключом типа char(50)
?