加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – 如何将外键约束放在sql server中的计算字段上?

发布时间:2020-12-12 06:37:56 所属栏目:MsSql教程 来源:网络整理
导读:表A有一个名为Computed1的计算字段.它是持久的而不是空的.此外,它总是计算一个char(50)的表达式.它也是独一无二的,并且有一个独特的键约束. 表B有一个字段RefersToComputed1,它应该引用一个有效的Computed1值. 尝试在引用A’Computed1的B的RefersToComputed1
表A有一个名为Computed1的计算字段.它是持久的而不是空的.此外,它总是计算一个char(50)的表达式.它也是独一无二的,并且有一个独特的键约束.

表B有一个字段RefersToComputed1,它应该引用一个有效的Computed1值.

尝试在引用A’Computed1的B的RefersToComputed1上创建外键约束会导致以下错误:

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的这个提示.

解决方法

计算字段由char(M),char(N)等组成,加起来为M N .. = 50,但计算字段本身是varchar(50).将RefersToComputed1更改为varchar(50)而不是char(50)可以解决问题.

计算字段外键不需要特殊处理(尽管计算列可能需要持久化).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读