SQL 触发器 当向入库表中插入 型号 数量 时检查库存表中是否存在此型号 存在则用update 不存在则用insert
1-----SQL触发器当向入库表中插入型号数量-后-触发检查库存表中是否存在此型号(主键)存在则用update不存在则用insert对库存表进行修改并返回触发器是否对库...
1-----SQL 触发器 当向入库表中插入 型号 数量 -后- 触发检查库存表中是否存在此型号(主键) 存在则用update 不存在则用insert 对库存表进行修改 并返回触发器是否对库存表操作成功 返回值用C#接收
2-----当向入库表中插入 型号 数量 -前- 触发检查库存表中是否存在此型号(主键) 存在则用update 不存在则用insert 对库存表进行修改 并检查触发器是否对库存表修改成功 不成功的话回滚操作同时向入库表中插入的操作是否可以回滚
做库存管理 入库表对库存表的触发器不会写 不知道一般是该用插入前触发还是该用插入后触发 帮帮忙
同时想问下 我这样一张入库单 一张出库单 一张库存表 实际多人使用中会不会出现并发之类的问题 展开
2-----当向入库表中插入 型号 数量 -前- 触发检查库存表中是否存在此型号(主键) 存在则用update 不存在则用insert 对库存表进行修改 并检查触发器是否对库存表修改成功 不成功的话回滚操作同时向入库表中插入的操作是否可以回滚
做库存管理 入库表对库存表的触发器不会写 不知道一般是该用插入前触发还是该用插入后触发 帮帮忙
同时想问下 我这样一张入库单 一张出库单 一张库存表 实际多人使用中会不会出现并发之类的问题 展开
2个回答
展开全部
--你这个插入语句,触发器应该触发不了吧,如果插入的型号重复,会违反主键约束的
--可以用存储过程解决。
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#]
--可以用存储过程解决。
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#]
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询