使用 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);
我必须将数据插入主记录和详细记录,但是如果我需要使用 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);