SQL 触发器 当向入库表中插入 型号 数量 时检查库存表中是否存在此型号 存在则用update 不存在则用insert

1-----SQL触发器当向入库表中插入型号数量-后-触发检查库存表中是否存在此型号(主键)存在则用update不存在则用insert对库存表进行修改并返回触发器是否对库... 1-----SQL 触发器 当向入库表中插入 型号 数量 -后- 触发检查库存表中是否存在此型号(主键) 存在则用update 不存在则用insert 对库存表进行修改 并返回触发器是否对库存表操作成功 返回值用C#接收
2-----当向入库表中插入 型号 数量 -前- 触发检查库存表中是否存在此型号(主键) 存在则用update 不存在则用insert 对库存表进行修改 并检查触发器是否对库存表修改成功 不成功的话回滚操作同时向入库表中插入的操作是否可以回滚

做库存管理 入库表对库存表的触发器不会写 不知道一般是该用插入前触发还是该用插入后触发 帮帮忙
同时想问下 我这样一张入库单 一张出库单 一张库存表 实际多人使用中会不会出现并发之类的问题
展开
 我来答
laosong2008
2012-04-24 · TA获得超过159个赞
知道小有建树答主
回答量:283
采纳率:0%
帮助的人:246万
展开全部
--你这个插入语句,触发器应该触发不了吧,如果插入的型号重复,会违反主键约束的
--可以用存储过程解决。
if object_id('sp_insert_tablename') is not null
drop procedure sp_insert_tablename
go
create procedure sp_insert_tablename
@型号 varchar(50)
,@数量 int
as
begin
if exists(select 1 from tablename where 型号=@型号)
begin
update tablename set 数量=数量+@数量 where 型号=@型号
end
else
begin
insert into tablename(型号,数量)
values(@型号,@数量)
end
end

--同样的 也可以在客户端用实现,例如c#
[code language=c#]
SqlConnection sqlConn=new SqlConnection("server=.;datetable=xxx;uid=xxx;pwd=xxx");
try{sqlConn.Open()}
catch{Messageboxes.Show("打开数据库连接失败"); return;}
string sql="select 1 from tablename where 型号='型号1'";
SqlCommand sqlCmd=new SqlCommand(sql,sqlConn);
object result=sqlCmd.ExecuteScalar();
if(null==result)
{
sql="insert into tablename (型号,数量) values('型号1',14)";
}
else
{
sql=" update tablename set 数量=数量+14 where 型号='型号1'";
}
sqlCmd=new SqlCommand(sql,sqlConn);
try{
sqlCmd.ExecuteNonquery();
}
catch{"数据操作失败"); return;
}
try{sqlConn.Close()}
catch{return;}
[/code language=c#]
tkbh
2012-04-23 · TA获得超过531个赞
知道小有建树答主
回答量:629
采纳率:0%
帮助的人:110万
展开全部
after insert if

esle..
追问
不用这么简单吧~~我想要的是具体怎么写 而且会有并发的问题吗 回滚呢~~
追答
给你个思路啊。。回滚肯定是要的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式