用于在两个表中插入数据的存储过程

时间:2014-01-21 05:36:12

标签: mysql stored-procedures

我正在使用存储过程将数据插入两个表中。但是当我插入数据时,第一个表和第二个表中的总行数是不同的,所以这意味着有时它只在第一个表中插入数据但是无法将其插入第二个表中。但是这种情况不应该发生在我的情况下,因为两个表的Id彼此相关。我怎么解决这个问题?因此,如果发生错误,它将在两个表中插入数据或不插入表,以便表中的数据数相同。我的存储过程如下:

Begin
insert into base_table(imgPath,store,apparelType) values (imgPath,store,apparelType);
insert into data_table(cvID,color) values
(LAST_INSERT_ID(),color);
END

1 个答案:

答案 0 :(得分:0)

要确保第一个查询已成功执行,最好的方法是在base_table中添加一个Identity列,然后按以下步骤操作;

DECLARE @LAST_INSERT_ID INT
DECLARE @EXECUTION_OK char(1)
SET @EXECUTION_OK = 1

insert into base_table(imgPath,store,apparelType) values (imgPath,store,apparelType)

SELECT @LAST_INSERT_ID = SCOPE_IDENTITY()

insert into data_table(cvID,color) values (@LAST_INSERT_ID, color)
GO

If exists( Select cvID from data_table where cvID= @LAST_INSERT_ID)
Begin
@EXECUTION_OK = 0
End

SCOPE_IDENTITY :返回插入同一范围内标识列的最后一个标识值。范围是一个模块:存储过程,触发器,函数或批处理。因此,如果两个语句在同一存储过程,函数或批处理中,则它们在同一范围内。

您还可以使用mysql_affected_rows()功能验证查询是否成功。