我使用SQL Server工作。我有2個表格,Animal
和Cat
。當我添加一個新的貓到數據庫時,我想更新這兩個表。我應該首先將貓添加到Animal
表中,以便我可以將animal_Id
添加到Cat
表中。如何同時在數據庫的兩個表中插入數據?
有沒有辦法在兩張表上同時添加記錄?如果沒有,最好的辦法是什麼?
我只是想一個想法。
我使用SQL Server工作。我有2個表格,Animal
和Cat
。當我添加一個新的貓到數據庫時,我想更新這兩個表。我應該首先將貓添加到Animal
表中,以便我可以將animal_Id
添加到Cat
表中。如何同時在數據庫的兩個表中插入數據?
有沒有辦法在兩張表上同時添加記錄?如果沒有,最好的辦法是什麼?
我只是想一個想法。
如果您使用的是transaction,則兩個插入操作至少在邏輯上將「同時」完成。
這意味着從事務外部完成的其他查詢不能看到「插入之間」的基數。如果兩個插入之間出現故障(並且沒有有效提交),則最終狀態將忽略第一次插入。
爲了獲得剛加入會議的行的ID,請使用SCOPE_IDENTITY。
但是我怎麼能知道在第一個表添加記錄的ID? –
您可能需要SELECT [SCOPE_IDENTITY](http://msdn.microsoft.com/en-us/library/ms190315.aspx)() –
您不能在一個語句中對兩個表使用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
不會觸發),該事務將被強制回滾。
如何使用觸發器插入到一張表時?
我建議在這裏使用交易。例如(如果您事先知道新行的標識):
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。
使用觸發器。這是最好的方式
是的,我不想要代碼 –