使用 T-SQL 在具有多数据的单个脚本中将数据插入 Master 和 Detail table

Insert data to Master and Detail table at the single script with multi-data using T-SQL

我必须将数据插入主记录和详细记录,但是如果我需要使用 T-SQL.
在单个脚本中插入这两个数据,我该怎么办 问题
1.How 当插入数据时,我可以得到主索引键(身份增量)吗
2.and 然后同时获取索引键到详细记录(在单个脚本中)

For example(hopefully result):

硕士table

详情 table

列"SeatMasterIndexID"数据来自Master"IndexID"

PS: pseudocode

INSERT INTO MasterTable (TeamId ,  BranchId , SeatId) OUTPUT Inserted.IndexID ......
INSERT INTO DetailTable (TeamId ,MasterIndexID) values('1',Inserted.IndexID <-- from output Inserted.IndexID)

如果一次插入一行,则可以使用 SCOPE_IDENTITY

如果您要将多行(例如来自 select 语句)插入到您的 Master table 中。您可以 OUTPUT CLAUSE 将所有插入的 ID 从 Master table 获取到一个临时文件 table 中(您必须提前创建此临时文件 table)。

由于您没有提供源查询来填充 Master 和详细信息 tables,我提供了插入两个 tables 的基本查询。

IF OBJECT_ID('tempdb..#MasterTable') IS NOT NULL
    DROP TABLE #MasterTable;

IF OBJECT_ID('tempdb..#DetailsTable') IS NOT NULL
    DROP TABLE #DetailsTable;

IF OBJECT_ID('tempdb..#TempTable') IS NOT NULL
    DROP TABLE #TempTable;

CREATE TABLE #MasterTable
    (
        IndexId INT IDENTITY(1, 1) ,
        TeamId INT ,
        BranchId INT ,
        SeatId INT
    );



CREATE TABLE #DetailsTable
    (
        IndexId INT IDENTITY(1, 1) ,
        TeamId INT ,
        BranchId INT ,
        SeatId INT ,
        SeatMasterIndexId INT
    );


CREATE TABLE #TempTable
    (
        IndexId INT ,
        TeamId INT ,
        BranchId INT ,
        SeatId INT
    );

INSERT INTO #MasterTable ( TeamId ,
                           BranchId ,
                           SeatId )
OUTPUT Inserted.*
INTO #TempTable
VALUES ( 1 , -- TeamId - int
         2 , -- BranchId - int
         2   -- SeatId - int
    );

INSERT INTO #DetailsTable ( TeamId ,
                            BranchId ,
                            SeatId ,
                            SeatMasterIndexId )
            SELECT TeamId ,
                   BranchId ,
                   SeatId ,
                   IndexId
            FROM   #TempTable;

SELECT *
FROM   #MasterTable;
SELECT *
FROM   #DetailsTable;

我找到了另一个想法

INSERT INTO MasterTable ( TeamId ,  BranchId ,   SeatId )
OUTPUT INSERTED.IndexID, 1,1,1
INTO DetailsTable
(
IndexID,
TeamID,
BranchId ,   
SeatId
)
VALUES ( 1,1,1);