如何同时在数据库的两个表中插入数据?

时间:2012-08-28 14:03:52

标签: sql sql-server database

我使用SQL Server。我有2个表,AnimalCat。当我向数据库添加新cat时,我想更新两个表。我应该首先将cat添加到Animal表中,以便之后我可以将animal_Id添加到Cat表。

有没有办法在两张桌子上同时添加记录?如果没有,最好的方法是什么?

我只是想要一个主意。

5 个答案:

答案 0 :(得分:3)

如果你使用transaction,两个插入都将在“逻辑上”“同时”完成。

这意味着从事务外部完成的任何其他查询都不能在“插入之间”看到基础。如果两个插入之间存在故障(并且没有有效提交),则最终状态将忽略第一次插入。

要获取刚刚添加到会话中的行的ID,请使用SCOPE_IDENTITY

答案 1 :(得分:3)

您不能在一个语句中对两个表使用INSERT。

SET XACT_ABORT ON
BEGIN TRANSACTION

INSERT INTO [A](...) VALUES(...);
INSERT INTO [B](...) VALUES(...);

COMMIT TRANSACTION
SET XACT_ABORT OFF

事务是确保它是一切或什么也没有提交。 XACT_ABORT确保如果一个失败并出现错误(因此COMMIT TRANSACTION将不会触发),该事务将被强制回滚。

答案 2 :(得分:0)

我建议在这里使用交易。例如(如果您事先知道新行的Id):

DECLARE @CAT TABLE(id int, name varchar(50));
DECLARE @ANIMAL TABLE(id int);
DECLARE @anmalId INT = 1;

BEGIN TRAN 
 INSERT INTO @ANIMAL VALUES(@anmalId);
 INSERT INTO @CAT VALUES(@anmalId, 'Kitty');
COMMIT TRAN

SELECT * FROM @CAT;
SELECT * FROM @ANIMAL;

如果是自动增量,您可以使用@@ identity。

答案 3 :(得分:0)

使用触发器。这是最好的方式

答案 4 :(得分:-2)

在插入一个表时使用触发器怎么样?