明志唯新

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

发表于

近日被一个问题给疑惑:如何向一个数据库表内插入一个数据,然后获得插入后的产生的主键值,并将该值和其他参数写入另一个表,因为一直使用 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