gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 00:47:24 24 4
gpt4 key购买 nike

我正在使用存储过程将数据插入两个表中。但是当我插入数据时,第一个表和第二个表中的总行数是不同的,所以这意味着有时它只插入了第一个表中的数据,但未能插入到第二个表中。但这种情况不应该发生在我的情况下,因为两个表的 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

最佳答案

要确保第一个查询已成功执行,最好的方法是在您的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()函数来验证查询是否成功。

关于mysql - 用于在两个表中插入数据的存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21249965/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com