我使用SQL Server。我有2个表,Animal
和Cat
。当我向数据库添加新cat时,我想更新两个表。我应该首先将cat添加到Animal
表中,以便之后我可以将animal_Id
添加到Cat
表。
有没有办法在两张桌子上同时添加记录?如果没有,最好的方法是什么?
我只是想要一个主意。
答案 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)
在插入一个表时使用触发器怎么样?