创建不同数据类型的外键

时间:2018-09-19 10:55:06

标签: sql sql-server foreign-keys primary-key relationship

我不知道这是否可行,我以这种方式进行搜索,但是很多人只是说这是不可能的。但是,我从互联网上获得了一种数据,可以通过复制案例或应用程序的方式进行研究,当然,看来有可能为不同的数据类型建立关系。让我们来看一个例子。

enter image description here

1 个答案:

答案 0 :(得分:2)

我完全同意那些发表评论的人的观点:最佳答案是更改OrderDetail.OrderID的类型以匹配OrderHeader.ID。

其他任何事情是一个非常不好的主意

但是,假设由于某种原因您不能执行此操作,则可以创建外键。

您可以创建一个将一个数据类型转换为另一数据类型的计算字段,并在该字段上设置外键。请注意,为此,必须保留计算字段。

create table OrderHeader ( ID char(12) primary key )

create table OrderDetail ( OrderID char(10),
                           OrderID12 as cast ( OrderID as char(12) )
                           persisted
                           foreign key references OrderHeader(ID)
                           )

insert into OrderHeader ( ID ) values ( 'MOH333' )

insert into OrderDetail ( OrderID ) values ( 'MOH333' )

-- this one fails
insert into OrderDetail ( OrderID ) values ( '777PIR' )