表A有一个名为Computed1的计算字段。它是持久化
的且不能为空。此外,它总是计算为char(50)表达式。它也是唯一的,并且在其上有唯一键约束。
表B有一个字段RefersToComputed1,应该引用有效的Computed1值。
试图在B的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。