【发布时间】:2021-08-12 08:26:06
【问题描述】:
我有一个表 SourceTable,我想将它的一些数据复制到 TargetTable 中。 TargetTable 是具有现有行和标识 id 的现有表。
在 SourceTable 上,有一列是 TargetTable 的外键,例如源表.TargetTableId
我需要做的是将 SourceTable 中的行插入 TargetTable,然后使用 TargetTable 中新创建的 Id 更新 SourceTable.TargetTableId。
由于行不够唯一,我无法通过匹配多列进行插入和后续更新。
插入需要“插入新表并更新现有表的列,该列是新表的外键,具有新行的id”。
CREATE TABLE #SourceTable
(
Id INT IDENTITY(1,1),
Field1 NVARCHAR(MAX),
Field2 NVARCHAR(MAX),
TargetTableId INT
)
CREATE TABLE #TargetTable
(
Id INT IDENTITY(245,1),
Field1 NVARCHAR(MAX),
Field2 NVARCHAR(MAX),
)
INSERT INTO #SourceTable(Field1, Field2)
VALUES
('Apple','Pie'),
('Chocolate','Cake'),
('Apple','Pie')
INSERT INTO #TargetTable(Field1, Field2)
SELECT Field1, Field2
FROM #SourceTable
SourceTable 上的期望结果:
Id - Field1 - Field2 - TargetTableId
1 - Apple - Pie - 245
2 - Chocolate - Cake - 246
3 - Apple - Pie - 247
【问题讨论】:
-
INSERT和 `OUTPUT` 到另一个表中,然后你有新的 ID?上面的真的很模糊。示例数据、预期结果和 您的尝试将帮助我们帮助您。 -
听起来您应该考虑使用 AFTER INSERT 触发器,然后将
@@IDENTITY添加到 SourceTable 中。 -
考虑到 OP 说“行”@SchmitzIT,我怀疑
@@IDENTITY(或更好的SCOPE_IDENTITY)将提供 OP 想要的值。 -
@Larnu。使用示例数据和预期结果发布更新。非常感谢。
-
Wjere 是 245、246 和 247 来自哪里?
标签: sql sql-server tsql