SQL - 交易在交易中获取自动增量值

SQL - Transactions Get Auto Increment Value Inside The Transaction

我有 2 个 table,第一个 table 包含项目的次要细节,第二个 table 包含其余信息。

BEGIN TRANSACTION;

INSERT INTO Items (Name, CategoryId) 
VALUES ('My Tv', 5);

INSERT INTO CharsToItem (ItemId, Value) 
VALUES ((SELECT Id FROM Items WHERE Id = @@Identity;), '65 Inch');

INSERT INTO CharsToItem (ItemId, Value) 
VALUES ((SELECT Id FROM Items WHERE Id = @@Identity;), '3840x2160');

COMMIT;

第一次插入 CharToItem table 时,一切正常,第二次它说 return 值为 NULL,我无法将它插入到数据库。

有没有办法将Id保存在select中多次使用?

第一次插入到CharsToItem后table,@@Identityreturns新插入的项目id在CharsToItem.

因此,插入Items后,将id存入变量

DECLARE @itemId int -- Variable to store the last ItemId.

BEGIN TRANSACTION;

INSERT INTO Items (Name, CategoryId) VALUES ('My Tv', 5);
SET @itemId = SCOPE_IDENTITY();  -- Store the new ItemId

INSERT INTO CharsToItem (ItemId, Value) VALUES (@itemId, '65 Inch');
INSERT INTO CharsToItem (ItemId, Value) VALUES (@itemId, '3840x2160');

COMMIT;

请注意,您不必 SELECT 某些内容的最后一个 ID,@@IDENTITYSCOPE_IDENTITY() return 已经是最后一个 ID。

另请注意,SCOPE_IDENTITY()@@IDENTITY 更安全,因为 @@IDENTITY 可以 return 由触发器创建的 ID,例如。

this answer to this SO question: scope_identity vs ident_current

DECLARE @ItemId int;

BEGIN TRANSACTION;

INSERT INTO Items (Name, CategoryId) VALUES ('My Tv', 5);

SET @ItemId = scope_identity();

INSERT INTO CharsToItem (ItemId, Value) VALUES (@ItemId, '65 Inch');
INSERT INTO CharsToItem (ItemId, Value) VALUES (@ItemId, '3840x2160');

COMMIT;