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,@@Identity
returns新插入的项目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,@@IDENTITY
或 SCOPE_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;
我有 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,@@Identity
returns新插入的项目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,@@IDENTITY
或 SCOPE_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;