3

我使用 SQL Server 工作。我有 2 张桌子,Animal并且Cat. 当我向数据库中添加一只新猫时,我想更新这两个表。我应该先把猫加到Animal桌子上,然后我才能把它animal_Id加到Cat桌子上。

有没有办法同时在两个表中添加记录?如果没有,最好的方法是什么?

我只是想要一个想法。

4

5 回答 5

3

如果您使用事务,则至少在逻辑上,两个插入都将“同时”完成。

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

为了获取刚刚添加到会话中的行的 id,请使用SCOPE_IDENTITY

于 2012-08-28T14:05:00.110 回答
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不会触发),事务将被强制回滚。

于 2012-08-28T14:06:23.290 回答
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。

于 2012-08-28T14:14:17.417 回答
0

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

于 2013-06-18T14:00:02.770 回答
-2

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

于 2012-08-28T14:11:14.560 回答