我使用 SQL Server 工作。我有 2 张桌子,Animal
并且Cat
. 当我向数据库中添加一只新猫时,我想更新这两个表。我应该先把猫加到Animal
桌子上,然后我才能把它animal_Id
加到Cat
桌子上。
有没有办法同时在两个表中添加记录?如果没有,最好的方法是什么?
我只是想要一个想法。
我使用 SQL Server 工作。我有 2 张桌子,Animal
并且Cat
. 当我向数据库中添加一只新猫时,我想更新这两个表。我应该先把猫加到Animal
桌子上,然后我才能把它animal_Id
加到Cat
桌子上。
有没有办法同时在两个表中添加记录?如果没有,最好的方法是什么?
我只是想要一个想法。
如果您使用事务,则至少在逻辑上,两个插入都将“同时”完成。
这意味着从事务外部完成的任何其他查询都无法看到“插入之间”的基础。如果两次插入之间都失败(并且没有有效的提交),最终状态将忽略第一次插入。
为了获取刚刚添加到会话中的行的 id,请使用SCOPE_IDENTITY。
您不能在一个语句中对两个表使用 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
不会触发),事务将被强制回滚。
我建议在这里使用事务。例如(如果您事先知道新行的 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。
使用触发器。这是最好的方法
插入一张表时使用触发器怎么样?