简单的过程

mingcsharp 2013-10-23 09:15:48
主表(父表):
INSERT INTO SheetPlan(SheetCode,MakePerson,PlanDate,SheetLink,Mark)VALUES(@SheetCode,@MakePerson,@PlanDate,@SheetLink,@Mark)

从表(子表):
INSERT INTO SheetPlanItem(SheetCode,CustName,ProName,Std,ColorName,TankNo,UnitT,QtyT,UnitW,QtyW,UnitJ,QtyJ,Perg,SheetLink,Mark)VALUES(@SheetCode,@CustName,@ProName,@Std,@ColorName,@TankNo,@UnitT,@QtyT,@UnitW,@QtyW,@UnitJ,@QtyJ,@Perg,@SheetLink,@Mark)

两个表合起来刚好是一个单据,
现在想求一条,保存单据的存储过程.谢谢
...全文
416 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
唐诗三百首 2013-10-23
  • 打赏
  • 举报
回复
引用 2 楼 wmingcsharp 的回复:
要是单据编辑一下再保存你这个不行了吧???我考虑这种情况的
编辑后保存对应是update语句,不应是insert语句. 建议新增跟保存分2个存储过程管理.
LongRui888 2013-10-23
  • 打赏
  • 举报
回复
引用 4 楼 wmingcsharp 的回复:
现在只有insert,编辑是数据已经存在,只是修改一下,然后再保存吗,也就是update操作
發糞塗牆 2013-10-23
  • 打赏
  • 举报
回复
应该把修改和保存两个操作分别放入两个事务中,保存前再次判断
mingcsharp 2013-10-23
  • 打赏
  • 举报
回复
LongRui888 2013-10-23
  • 打赏
  • 举报
回复
引用 2 楼 wmingcsharp 的回复:
要是单据编辑一下再保存你这个不行了吧???我考虑这种情况的
编辑是只数据已经存在,只是修改一下,然后再报错吗
mingcsharp 2013-10-23
  • 打赏
  • 举报
回复
要是单据编辑一下再保存你这个不行了吧???我考虑这种情况的
Andy__Huang 2013-10-23
  • 打赏
  • 举报
回复
create proc proc_AddSheetPlan 
@SheetCode varchar(10),
@MakePerson varchar(10),
.......  -->这里被完参数

as
set nocount on
begin tran
INSERT INTO SheetPlan(SheetCode,MakePerson,PlanDate,SheetLink,Mark)VALUES(@SheetCode,@MakePerson,@PlanDate,@SheetLink,@Mark)
if @@error<>0 goto errhandle

INSERT INTO SheetPlanItem(SheetCode,CustName,ProName,Std,ColorName,TankNo,UnitT,QtyT,UnitW,QtyW,UnitJ,QtyJ,Perg,SheetLink,Mark)
VALUES(@SheetCode,@CustName,@ProName,@Std,@ColorName,@TankNo,@UnitT,@QtyT,@UnitW,@QtyW,@UnitJ,@QtyJ,@Perg,@SheetLink,@Mark)
if @@error<>0 goto errhandle

commit tran
return

errhandle:
rollback tran

go


--小F-- 2013-10-23
  • 打赏
  • 举报
回复
create proc dbo.proc_insert_update
@flag int
as
;MERGE  SheetPlanItem AS a
(
SELECT SheetCode,MakePerson,PlanDate,SheetLink,Mark FROM SheetPlan
) AS b ON a.SheetCode=b.SheetCode
WHEN MATCHED AND @flag=0 THEN
INSERT INTO ....
WHEN NOT MATCHED AND @flag=1
THEN 
UPDATE .....
   

go
--小F-- 2013-10-23
  • 打赏
  • 举报
回复
引用 10 楼 DBA_Huangzj 的回复:
引用 8 楼 wmingcsharp 的回复:
看来是两步走了??
2008直接用merge来实现insert还是update
相当同意 比较好用
  • 打赏
  • 举报
回复
专门传个参数@type insert 或 updte 判断执行插入还是修改
LongRui888 2013-10-23
  • 打赏
  • 举报
回复
大致就是这样:



create proc dbo.proc_insert_update
@flag int,其他参数定义
as

if @flag = 1
	begin
	   INSERT INTO SheetPlan(SheetCode,MakePerson,PlanDate,SheetLink,Mark)VALUES(@SheetCode,@MakePerson,@PlanDate,@SheetLink,@Mark)

	   --从表(子表):
	   INSERT INTO SheetPlanItem(SheetCode,CustName,ProName,Std,ColorName,TankNo,UnitT,QtyT,UnitW,QtyW,UnitJ,QtyJ,Perg,SheetLink,Mark)VALUES(@SheetCode,@CustName,@ProName,@Std,@ColorName,@TankNo,@UnitT,@QtyT,@UnitW,@QtyW,@UnitJ,@QtyJ,@Perg,@SheetLink,@Mark)
	end
else
    begin
       update SheetPlan set 列= 值,...
       update SheetPlanItem set 列=值
    end

go
發糞塗牆 2013-10-23
  • 打赏
  • 举报
回复
引用 8 楼 wmingcsharp 的回复:
看来是两步走了??
2008直接用merge来实现insert还是update
LongRui888 2013-10-23
  • 打赏
  • 举报
回复
引用 8 楼 wmingcsharp 的回复:
看来是两步走了??
在存储过程中设置一个标记变量,当flag = 1,那就是insert,那么当flag = 2时,就是update操作
mingcsharp 2013-10-23
  • 打赏
  • 举报
回复
看来是两步走了??

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧