Sql 从旧表迁移到新表时出现问题

Sql 从旧表迁移到新表时出现问题,sql,sql-server,sql-server-2005,sql-server-2012,Sql,Sql Server,Sql Server 2005,Sql Server 2012,我正在将数据从一个表传输到另一个表 旧表以前有一个名为City的varchar列 新表中没有城市名称,而是有一个名为CityId的int列,因为我只为城市创建了一个新表 “我的城市”表包含以下列: CityID - PK RegionID - FK CityName - Varchar(50) 我正在运行此查询以复制新表的旧数据: INSERT INTO dbo.Client(EmailAddress, CityID) a.EmailAddress, (SELECT CityID FROM

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

旧表以前有一个名为City的varchar列

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

“我的城市”表包含以下列:

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.

谢谢。

也许这就是你要找的

INSERT INTO dbo.Client(EmailAddress, CityID)
SELECT 
    a.EmailAddress
,   c.CityID 
FROM AdventureWorksOld.dbo.Client a
LEFT JOIN Cities c ON c.CityName = a.City 
试试这个:

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

请张贴您的城市表在表
城市
中检查您的数据。似乎有多行
CityID
用于
城市
运行
选择城市名称,按城市名称从城市组中计数(*),以查找具有重复城市名称的记录。删除其中一个重复项并重试。谢谢,现在我知道为什么查询不起作用了,我复制了记录此代码将在OP的环境中失败,因为他在Cities表中显然有重复的值。此查询可以工作,但无法解决问题的根本原因,即数据问题。此查询是正确的,但它解决了OP请求协助的问题。@Squirrel。谢谢你的反对票。我反对票有两个原因。首先是我已经提到的。第二,没有任何解释或描述的查询/代码对其他人帮助不大。如果你能改进答案,我会很高兴收回下voteWell有时你没有能力更改数据库和晚餐时间你只需要完成工作,但你有一个伟大的一天@Squirrel
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