当前位置: 代码迷 >> Sql Server >> 不能不能将值 NULL 插入列,该怎么解决
  详细解决方案

不能不能将值 NULL 插入列,该怎么解决

热度:77   发布时间:2016-04-24 10:03:53.0
不能不能将值 NULL 插入列
create proc BCM_ADD_RuleName
(@BOM_SM_RuleID int,
@BomName varchar(50),
@Bom_SM_ID int
)
as

declare @Bom_SM_ID int
insert into Bom_SecondMaterial_Detail(Bom_SM_RuleID,BomName) values(@BOM_SM_RuleID,@BomName)
set @Bom_SM_ID=@@identity

Bom_SM_ID是Bom_SecondMaterial_Detail表的主键,我测试总是报”不能将null值插入Bom_SM_ID“,
请教各位,我改怎么写?
------解决方案--------------------
主键去掉,换唯一约束,但是这个也只能允许一个null值存在,多一个也不行
------解决方案--------------------
你这个建议去掉主键 增加一个自增列作为主键就可以了。
------解决方案--------------------
要么设默认值,但是默认值不能重复,不然就没办法了
------解决方案--------------------
既然你Bom_SM_ID作为主键,那么就不要在使用@@identity来赋值,直接使用一个自增列吧
------解决方案--------------------
将 declare @Bom_SM_ID int 语句删除
参数中传入了 @Bom_SM_ID,你再定义要闹那样?
建存储过程时不报错吗?
------解决方案--------------------
难道楼上这么多方案都不行?还是你写的存储过程就有问题?

------解决方案--------------------
那么就是你调用SP时传入的@Bom_SM_ID为NULL,给它赋值啊。
------解决方案--------------------
insert into Bom_SecondMaterial_Detail(Bom_SM_RuleID,BomName,Bom_SM_ID) values(@BOM_SM_RuleID,@BomName,@Bom_SM_ID)
主键不能为空,除非是标识列,否则添加时必须有值
------解决方案--------------------
LZ ,你这PK列肯定不是自增列,你查查。
------解决方案--------------------
引用:
那么就是你调用SP时传入的@Bom_SM_ID为NULL,给它赋值啊。

肯定是这个原因了.
你是不是用了@@identity做为@Bom_SM_ID往里插的呀,你的@@identity值为null,肯定报这个错了.
因为你的Bom_SM_ID虽然是主键但不是标识列.

------解决方案--------------------
只设置主键,没有设置递增长列吧。。
------解决方案--------------------
引用:
要么设默认值,但是默认值不能重复,不然就没办法了
默认值不是相同了吗?肯定也是不行的
------解决方案--------------------
引用:
Quote: 引用:

要么设默认值,但是默认值不能重复,不然就没办法了
默认值不是相同了吗?肯定也是不行的
你没看到“但是”那几个字吗?
  相关解决方案