最近一个项目碰见要用存储过程的情况,通过重新学习。已初步完成功能,现列出来。大家给个意见。
需求描述:数据库中有一主一从表,A和B;A和B是一对多的关系。另有和A、B结构相同的表C和表D。要实现,通过表A的主键id,把与此id值相关的记录(表A和表B中)分别更新插入到表C和表D中,同时要求有事务控制。
分析要点:1)存储过程需要传入一个参数,id。2)表B中的记录多少不定,可能需要插入多条记录。3)整个过程需要事务控制。
实现代码如下:
CREATE PROCEDURE query_pro_info
@pi_id int
AS
begin
begin transaction
if exists (select * from pro_ent_info where PI_ID=@pi_id)
delete pro_ent_info where PI_ID=@pi_id
insert into pro_ent_info(EI_ID,EP_ID,EP_TYP,CI_ID,CI_NUM,CI_TOT,CI_TYP,PI_ID,PI_NUM,PI_NAM,PI_CLI,PI_CLI_TEL,PI_CLI_MAN,PI_ARE,PI_CAT,PI_STA,PI_MAN,PI_ADD,PI_REM,PI_CHE,PI_PLA_SPA,PI_PLA_BEG,PI_PLA_END,PI_CRE_DAT,PI_CRE_MAN,PI_MOD_DAT,PI_MOD_MAN)select EI_ID,EP_ID,EP_TYP,CI_ID,CI_NUM,CI_TOT,CI_TYP,PI_ID,PI_NUM,PI_NAM,PI_CLI,PI_CLI_TEL,PI_CLI_MAN,PI_ARE,PI_CAT,PI_STA,PI_MAN,PI_ADD,PI_REM,PI_CHE,PI_PLA_SPA,PI_PLA_BEG,PI_PLA_END,PI_CRE_DAT,PI_CRE_MAN,PI_MOD_DAT,PI_MOD_MAN from pro_info where pro_info.PI_ID=@pi_id
if exists (select * from pro_ent_cost where PI_ID=@pi_id)
delete pro_ent_cost where PI_ID=@pi_id
insert into pro_ent_cost(PI_ID,PC_ID,PC_DIV,PC_DIV_SEQ,PC_BUD_LAB,PC_BUD_MAT,PC_BUD_DEV,PC_BUD_CMP,PC_BUD_TOT,PC_BUD_REM,PC_PLA_LAB,PC_PLA_MAT,PC_PLA_DEV,PC_PLA_CMP,PC_PLA_TOT,PC_PLA_REM,PC_ACT_LAB,PC_ACT_MAT,PC_ACT_DEV,PC_ACT_CMP,PC_ACT_TOT,PC_ACT_REM,PC_DIV_PLA_BEG,PC_DIV_PLA_END,PC_DIV_PLA_SPA,PC_DIV_ACT_BEG,PC_DIV_ACT_END,PC_DIV_ACT_SPA,PC_DIV_SPA_ABN,PC_PRO_REC,PC_DIV_PAI,PC_DIV_SHO,PC_CHE,PC_OFF,PC_REM,PC_CRE_DAT,PC_CRE_MAN,PC_MOD_DAT,PC_MOD_MAN)select PI_ID,PC_ID,PC_DIV,PC_DIV_SEQ,PC_BUD_LAB,PC_BUD_MAT,PC_BUD_DEV,PC_BUD_CMP,PC_BUD_TOT,PC_BUD_REM,PC_PLA_LAB,PC_PLA_MAT,PC_PLA_DEV,PC_PLA_CMP,PC_PLA_TOT,PC_PLA_REM,PC_ACT_LAB,PC_ACT_MAT,PC_ACT_DEV,PC_ACT_CMP,PC_ACT_TOT,PC_ACT_REM,PC_DIV_PLA_BEG,PC_DIV_PLA_END,PC_DIV_PLA_SPA,PC_DIV_ACT_BEG,PC_DIV_ACT_END,PC_DIV_ACT_SPA,PC_DIV_SPA_ABN,PC_PRO_REC,PC_DIV_PAI,PC_DIV_SHO,PC_CHE,PC_OFF,PC_REM,PC_CRE_DAT,PC_CRE_MAN,PC_MOD_DAT,PC_MOD_MAN from pro_cost where pro_cost.PI_ID=@pi_id
if(@@error<>0)
begin
print('rollback transaction')
rollback transaction
return 0
end
commit transaction
end
GO
经过调试,功能基本正常。只是事务控制处理部分不知道写的对不对。望各位指正!
posted on 2008-11-14 09:52
matthew 阅读(279)
评论(1) 编辑 收藏 所属分类:
数据库(Sql server,My sql)