一张表里有个可以为空的外键,如何向这样的表插入数据?

jackylynn 2009-04-10 09:47:51
有一张产品出库表,里面有个合同ID的外键,类型为int型。产品出库分两种情况,一种是自然出库,这时候合同ID的外键为空;一种是跟合同出库,这时候合同ID外键不为空。

请问该如何向这样的表插入数据?

现在问题如下:

c#不向JAVA有INTEGER这种对象类型,int是值类型,你不管它它默认就是0,因为外键约束这样会报错。但由于合同ID外键字段可以为空,我现在不知道该如何处理...有人说不要insert这个字段它就会为空,但当需要插入这个字段时呢,所以很矛盾。请各位老师帮忙,100分送出。
...全文
192 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
guoming_yc 2009-04-12
  • 打赏
  • 举报
回复
xuexi ~~~~~~~~~~~
IT农夫 2009-04-12
  • 打赏
  • 举报
回复
如果0永远都不可能是合同id的话:
insert (字段,..,合同id,..,字段)values(值...,nullif(合同id值,0),..,值..)
如果0永远都可能是合同id的话,根据业务来写不同的SQL
自然出库时,合同ID列不写在SQL插入语句中,默认就会为ull值;
合同出库时,合同ID列插入合同ID的值;
ai_li7758521 2009-04-10
  • 打赏
  • 举报
回复
貌似这情况不适合做外键
Andy__Huang 2009-04-10
  • 打赏
  • 举报
回复
[Quote=引用楼主 jackylynn 的帖子:]
有一张产品出库表,里面有个合同ID的外键,类型为int型。产品出库分两种情况,一种是自然出库,这时候合同ID的外键为空;一种是跟合同出库,这时候合同ID外键不为空。

请问该如何向这样的表插入数据?

现在问题如下:

c#不向JAVA有INTEGER这种对象类型,int是值类型,你不管它它默认就是0,因为外键约束这样会报错。但由于合同ID外键字段可以为空,我现在不知道该如何处理...有人说不要insert这个字段它就会为空,但…
[/Quote]


自然出库时,合同ID列插入null值,不要插入0,因为有外键约束;
合同出库时,那自然要插入合同ID的值;
你可以先判断是哪一种出库?然后再决定要不要插入合同ID这个字段,插入null值和不插入的结果合同ID都为null,只要你弄明白,什么做都可以

Zoezs 2009-04-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jinjazz 的回复:]
insert (字段,..,合同id,..,字段)values(值...,nullif(合同id值,0),..,值..)

这样0的就是null了
[/Quote]
厉害。
claro 2009-04-10
  • 打赏
  • 举报
回复
实在要这样,只能用数据区分。(比如99为自然出库,合同编号等为合同出库)
ks_reny 2009-04-10
  • 打赏
  • 举报
回复
C#不懂,帮顶。
ws_hgo 2009-04-10
  • 打赏
  • 举报
回复
不宜设置外键。
you_tube 2009-04-10
  • 打赏
  • 举报
回复
顶楼上的,将插入数据处理一下nullif(合同id值,0)
htl258_Tony 2009-04-10
  • 打赏
  • 举报
回复
偶也觉得这种情况不宜设置外键。
jinjazz 2009-04-10
  • 打赏
  • 举报
回复
insert (字段,..,合同id,..,字段)values(值...,nullif(合同id值,0),..,值..)

这样0的就是null了
百年树人 2009-04-10
  • 打赏
  • 举报
回复
这种情况下不能设置外键约束

22,181

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧