表 A 有一个名为 Computed1 的计算字段。它是persisted
并且不为空。此外,它总是计算出 char(50) 表达式。它也是唯一的并且具有唯一的键约束。
表 B 有一个字段 RefersToCompulated1,它应该引用有效的 Computed1 值。
尝试在 B 的 RefersToCompulated1 上创建引用 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.
问:为什么会产生这个错误?计算列的外键是否需要特殊措施?如果需要,它们是什么?
概括:
- 具体问题是由计算得出的、基于 char 的字段为 varchar 引起的。因此,Computed1 是 varchar(50) 而不是 char(50)。
- 最好对计算字段的表达式进行强制转换,以强制其为特定类型。这个建议归功于 Cade Roux。
计算字段由 char(M)、char(N) 等组成,加起来为 M+N+.. = 50,但计算字段本身是 varchar(50)。将 RefersToCompulated1 更改为 varchar(50) 而不是 char(50) 可以解决该问题。
计算字段外键不需要特殊处理(尽管计算列上可能需要持久化)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)