当前位置: 代码迷 >> Sql Server >> 请教这种一次执行的要判断是添加还是更新如何做
  详细解决方案

请教这种一次执行的要判断是添加还是更新如何做

热度:79   发布时间:2016-04-27 18:01:05.0
请问这种一次执行的要判断是添加还是更新怎么做?
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.库存)
------解决方案--------------------
先更新再新增
  相关解决方案