最近一個項目碰見要用存儲過程的情況,通過重新學習。已初步完成功能,現列出來。大家給個意見。
需求描述:數據庫中有一主一從表,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 閱讀(283)
評論(1) 編輯 收藏 所屬分類:
數據庫(Sql server,My sql)