日期:2014-05-18  浏览次数:20531 次

请问这种一次执行的要判断是添加还是更新怎么做?
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(参数)
as
begin
    if not exists(select * from tb where XX=参数)
      insert into tb ...
    else 
      update tb set XXX=XX
end

------解决方案--------------------
SQL code
你应该把你要插入的弄成一个结果集放入一个表

然后
insert into tb t selet * from #t where not exists(select 1 from tb where 仓库=t.仓库 and 商品编号=t.商品编号 and 库存=t.库存)

------解决方案--------------------
先更新再新增