Как поместить ограничения внешнего ключа на вычисленные поля в SQL-сервере?

Таблица 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: Почему эта ошибка создается? Там специальные меры необходимы для внешних ключей для вычисляемых столбцов, и раз так каковы они?


Сводка:

  • Определенная проблема повышается с вычисленного, базирующийся символ, при этом поля varchar. Следовательно, Computed1 является varchar (50) и не символ (50).
  • Лучше иметь бросок, окружающий выражение вычисленного поля для принуждения его к определенному типу. Кредит переходит к Заправке для соуса Бочонка для этой подсказки.
8
задан Asaf R 2 April 2010 в 05:42
поделиться

3 ответа

Вычисляемое поле состоит из char (M), char (N) и т. Д. on, что в сумме дает M + N + .. = 50, но само вычисляемое поле - это varchar (50). Изменение RefersToComputed1 на varchar (50) вместо char (50) решает проблему.

Внешние ключи вычисляемых полей не требуют специальной обработки (хотя может потребоваться сохранение в вычисляемом столбце).

7
ответ дан 5 December 2019 в 18:58
поделиться

Является ли RefersToComputed1 точно таким же типом данных, длиной и сопоставлением, что и Computed1 ?

Дважды проверьте это ... например, вам нужен последний CAST или COLLATE на Computed1 , чтобы убедиться, что это именно то, что вы ожидаете? Я говорю это, потому что ошибка говорит о том, что 2 столбца разные

Edit: char и varchar не являются идентичными типами данных, поэтому вам понадобится CAST, чтобы изменить их

1
ответ дан 5 December 2019 в 18:58
поделиться

Является ли RefersToComputed1 первичным ключом типа char(50)?

1
ответ дан 5 December 2019 в 18:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: