- SQL code
如果 商品编号=CP2011110300006 且 仓库=1这条记录不存在,则执行INSERT INTO 商品库位 (仓库,商品编号,库存) VALUES (1,N'CP2011110300006',1);否则执行UPDATE 商品库位 SET 库存=库存+1 where [商品编号]=N'CP2011110300006' and [仓库]=1;
难点在这些语句会有很多并且是同时一次执行的,如果只是去判断数据库有没有这条记录就会出现这种问题:
比如下面的语句
- SQL code
INSERT INTO 商品库位 (仓库,商品编号,库存) VALUES (1,N'CP2011110300006',1);INSERT INTO 商品库位 (仓库,商品编号,库存) VALUES (1,N'CP2011110300007',1);INSERT INTO 商品库位 (仓库,商品编号,库存) VALUES (1,N'CP2011110300006',1);
本来第一条执行后就有 商品编号=CP2011110300006 且 仓库=1这条记录了,我希望第3条语句执行的时候执行更新语句
- SQL code
UPDATE 商品库位 SET 库存=库存+1 where [商品编号]=N'CP2011110300006' and [仓库]=1;
但是因为他们其实是一起执行的,所以只是去判断数据库记录的话根本就还没有那条记录,结果还是添加去了。
应该怎么写语句,谢谢。
------解决方案--------------------
写成一个存储过程,过程中先判断存不存在这条记录再分支执行插入或者更新,传入的参数一样
------解决方案--------------------
- SQL code
create proc pr_name(参数)asbegin if not exists(select * from tb where XX=参数) insert into tb ... else update tb set XXX=XXend
------解决方案--------------------
- SQL code
你应该把你要插入的弄成一个结果集放入一个表然后insert into tb t selet * from #t where not exists(select 1 from tb where 仓库=t.仓库 and 商品编号=t.商品编号 and 库存=t.库存)
------解决方案--------------------
先更新再新增