使用SCOPE\u标识从SQL Server中的多个表向多个表添加数据

使用SCOPE\u标识从SQL Server中的多个表向多个表添加数据,sql,sql-server,database,Sql,Sql Server,Database,我有两个临时表,包含数千条记录。以下是表格结构 #TmpCity ID | CityName 1 | test #Location ID | LocationName 1 | abc 2 | xyz 3 | etc 我有两个具有相同模式的物理表City和Location,其中as Location表包含一个外键CityID,它将自动递增City表的主键。我需要将数据从tmpCity添加到City表,并将tmpLocation添加到Location表

我有两个临时表,包含数千条记录。以下是表格结构

 #TmpCity

 ID | CityName

 1  |  test


 #Location
 ID |  LocationName

 1  |  abc
 2  |  xyz
 3  |  etc
我有两个具有相同模式的物理表City和Location,其中as Location表包含一个外键CityID,它将自动递增City表的主键。我需要将数据从tmpCity添加到City表,并将tmpLocation添加到Location表

我不能使用INSERT INTO,因为对于插入的每个城市记录,我必须使用scopeIdentity插入该城市的位置记录,因为有大量记录,我希望避免像循环或光标这样的逐行操作。
实现这一点的最佳方法是什么。

为什么不使用insert-In?只需在insert命令后从temp表格中选择值?我会使用OUTPUT子句和MERGE语句,正如我在这个类似问题中所显示的那样,我不能使用insert into,因为当我将数据从tmpCity插入城市表格时,我需要一个自动递增的PK,PK将作为外键进入位置表。对代码的解释和一些格式将大大有助于更好地回答这个问题。这里的格式使它变成了一堵很难阅读的文本墙。我编辑了这个问题。现在我在位置表中没有cityID。我必须从城市表中获取自动递增的PK才能插入到位置表中。只要尝试,它将在城市表的位置表中设置FK
INSERT INTO [dbo].[City]([CityName])
Select [CityName] from [dbo].[#TmpCity]

INSERT INTO [dbo].[Location]([CityId],[LocationName])
Select (select TOP(1) tab1.[CityId]  from [dbo].[City] as tab1
join  [dbo].[#City] as tab2 on tab1.[CityName]=tab2.[CityName]
where tab2.[ID]=loc.[CityId]),loc.[LocationName] from [dbo].[#Location] as loc