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