Sql server 从事务中的第一个表获取Id

Sql server 从事务中的第一个表获取Id,sql-server,transactions,Sql Server,Transactions,我拿这两张桌子为例 我需要在这个表中输入数据。如何获取输入到firstTable中的Id,并在第二个表中将其设置为外键FirstTableId BEGIN TRANSACTION INSERT INTO FirsTable (Name) VALUES ('example1') INSERT INTO SecondTable (Name, FirstTableId) VALUES ('example2', ?) COMMIT TRANSACTION 考虑到id是一个identity,使用@@

我拿这两张桌子为例

我需要在这个表中输入数据。如何获取输入到firstTable中的Id,并在第二个表中将其设置为外键FirstTableId

BEGIN TRANSACTION
INSERT INTO FirsTable (Name) VALUES ('example1')

INSERT INTO SecondTable (Name, FirstTableId) VALUES ('example2', ?)

COMMIT TRANSACTION

考虑到
id
是一个
identity
,使用
@@identity
作为下一步:-

BEGIN TRANSACTION
INSERT INTO FirsTable (Name) VALUES ('example1')

INSERT INTO SecondTable (Name, FirstTableId) VALUES ('example2', @@IDENTITY)

COMMIT TRANSACTION 
BEGIN TRANSACTION
DECLARE @id int
DECLARE @table table (id int)

INSERT INTO FirsTable (Name) 
OUTPUT inserted.id into @table
VALUES ('example1')
SELECT @id = id from @table

INSERT INTO SecondTable (Name, FirstTableId) VALUES ('example2',  @id)

COMMIT TRANSACTION
更多

更新:-

对于非标识列,使用表变量通过使用
输出获取id,如下所示:-

BEGIN TRANSACTION
INSERT INTO FirsTable (Name) VALUES ('example1')

INSERT INTO SecondTable (Name, FirstTableId) VALUES ('example2', @@IDENTITY)

COMMIT TRANSACTION 
BEGIN TRANSACTION
DECLARE @id int
DECLARE @table table (id int)

INSERT INTO FirsTable (Name) 
OUTPUT inserted.id into @table
VALUES ('example1')
SELECT @id = id from @table

INSERT INTO SecondTable (Name, FirstTableId) VALUES ('example2',  @id)

COMMIT TRANSACTION

更多信息

谢谢!如果我在这个事务中得到了另一个(第三个)INSERT,我需要获取firstTable的Id怎么办?没有任何问题,通过这个代码
INSERT INTO FirsTable(Name)OUTPUT inserted.Id INTO@table VALUES('example1')选择@Id=Id from@table
您将插入第一个表中的Id保留到
@Id
变量中,所以你想用什么就用什么。