Таблица A имеет вычисленное поле под названием Computed1. Это persisted
, а не null. Кроме того, он всегда вычисляет выражение, которое является char (50). Он также уникален и имеет уникальное ключевое ограничение.Как установить ограничения внешнего ключа для вычисленных полей в sql-сервере?
Таблица B имеет поле RefersToComputed1, которое должно ссылаться на действительное значение Computed1.
Попытка создать ограничение внешнего ключа на 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), а не char (50).
- Лучше всего, чтобы литье окружало выражение вычисленного поля, чтобы заставить его использовать определенный тип. Кредит отправляется в Cade Roux для этого наконечника. KG
good catch - CHAR (50) будет дополняться длиной 50 символов пробелами, а VARCHAR не будет - еще одним плюсом для использования VARCHAR над CHAR для таких вещей! –
Персистировать нужно было бы проиндексировать его, что потребовалось бы для создания FK на нем ... – gbn
Вы также можете сделать актерский состав в выражении вычисленного столбца, чтобы убедиться, что ваш упорный столбец относится к типу, который вы так считаете. Это большая проблема в строковых операциях. –