首页 > 解决方案 > 从旧表迁移到新表时遇到问题

问题描述

我正在将数据从一个表传输到另一个表。

旧表曾经有一个名为 City 的 varchar 列。

新表而不是城市名称,有一个名为 CityId 的 int 列,因为我只为 Cities 创建了一个新表。

我的城市表具有以下列:

CityID - PK

RegionID - FK

CityName - Varchar(50)

我正在运行此查询来复制新表的旧数据:

INSERT INTO dbo.Client(EmailAddress, CityID)
a.EmailAddress, (SELECT CityID FROM Cities WHERE CityName collate SQL_Latin1_General_CP1_CI_AS = a.City)
FROM AdventureWorksOld.dbo.Client a

但我不能这样做,因为子查询返回多行:

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

如何修复我的代码,以便我可以执行以下操作:

SELECT (SELECT CityName FROM Cities WHERE CityName = 'Oak Bay') -> Replace 'Oak Bay' with the text in the column
FROM AdventureWorksOld.dbo.Client

谢谢你。

标签: sqlsql-serversql-server-2005sql-server-2012

解决方案


尝试这个:

INSERT INTO dbo.Client(EmailAddress, CityID)
SELECT 
    a.EmailAddress
,   c.CityID 
FROM AdventureWorksOld.dbo.Client a
OUTER APPLY (SELECT TOP 1 c.CityID FROM Cities c WHERE c.CityName = a.City) c

推荐阅读