首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

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

2012-03-01 
请问这种一次执行的要判断是添加还是更新怎么做?SQL code 如果 商品编号CP2011110300006 且 仓库1这条记

请问这种一次执行的要判断是添加还是更新怎么做?

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.库存)
[解决办法]
先更新再新增

热点排行
Bad Request.