一个多表关联写入的存储过程

衣明志 发表于 , 阅读 (15286)

近日被一个问题给疑惑:如何向一个数据库表内插入一个数据,然后获得插入后的产生的主键值,并将该值和其他参数写入另一个表,因为一直使用mysql, access等不含存储过程的数据库,所以百死不得其解,终于从日本朋友那里得到了使用存储过程实现解决办法,其实看看也挺简单的。 都怪自己学艺不精。

程序代码:

CREATE procedure develop.insert_base_grid(@b_i int, @e_c int,@p_c varchar(192),@g_cint,@g_n int) 
as 
    -- 変数宣言 

DECLARE @parent INT -- 親レコードのID 保存 
DECLARE @error INT -- エラー値 保存 
-- トランザクション開始 
BEGIN TRANSACTION 
    -- 親レコードの挿入 

    INSERT INTO develop.syuko_base ( bills_id, employee_cd, prmss_comments,prmss_update, prmss_registdate ) 
    SELECT @b_i AS チラシID, @e_c AS 出稿MDCD, @p_c AS コメント, getDate()AS 更新日, getDate() AS 登録日; 
    SET @error = @@ERROR 
    IF @ERROR <> 0 GOTO EXIST_ERR 
    -- 親レコードのID の値を保存 
    SET @parent = SCOPE_IDENTITY() 

    -- 子レコードの挿入 
    INSERT INTO develop.gridinfo ( prmss_id, grid_cd, grid_num) 
    SELECT @parent AS 出稿CD, @g_c AS グリッドCD, @g_n AS グリッド数; 
    SET @error = @@ERROR 
    IF @ERROR <> 0 GOTO EXIST_ERR 

    -- トランザクションのコミット 
    COMMIT TRANSACTION 
    GOTO EXIST 

-- エラー処理 
EXIST_ERR: 
    ROLLBACK TRANSACTION 
    PRINT @error 
    GOTO EXIST 

-- 終了処理 
EXIST: 
GO