2012-08-28 209 views
3

我使用SQL Server工作。我有2個表格,AnimalCat。當我添加一個新的貓到數據庫時,我想更新這兩個表。我應該首先將貓添加到Animal表中,以便我可以將animal_Id添加到Cat表中。如何同時在數據庫的兩個表中插入數據?

有沒有辦法在兩張表上同時添加記錄?如果沒有,最好的辦法是什麼?

我只是想一個想法。

+0

是的,我不想要代碼 –

回答

3

如果您使用的是transaction,則兩個插入操作至少在邏輯上將「同時」完成。

這意味着從事務外部完成的其他查詢不能看到「插入之間」的基數。如果兩個插入之間出現故障(並且沒有有效提交),則最終狀態將忽略第一次插入。

爲了獲得剛加入會議的行的ID,請使用SCOPE_IDENTITY

+0

但是我怎麼能知道在第一個表添加記錄的ID? –

+1

您可能需要SELECT [SCOPE_IDENTITY](http://msdn.microsoft.com/en-us/library/ms190315.aspx)() –

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

我建議在這裏使用交易。例如(如果您事先知道新行的標識):

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。

相關問題