我有一个SQL Server数据库,它是使用Access数据库中的“导入/导出向导”创建的。然后,我有另一个基于Access数据库的SQL数据库,但模式略有不同。我试图将简单的基于Access的数据库中的数据导入更复杂的SQL服务器架构数据库。 Access数据库只是将Country作为文本存储在Contact表中,而在我的新模式中,Contact表有一个CountryId链接到Country表。我曾尝试编写SQL来执行此操作:
UDPATE SQLVersion.dbo.Contact
SET CountryId = (SELECT LookupCountry.Id
FROM SQLVersion.dbo.Country as LookupCountry, AccessDBVersion.dbo.tblContact as AccessContact
WHERE LookupCountry.Name = AccessContact.Country);
这不起作用,因为:
子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。
我可以理解为什么抛出这个错误但是我不知道如何形成正确的SQL,它允许它使用查找中找到的值更新每一行。有人可以帮忙吗?
答案 0 :(得分:4)
您似乎错过了Contact
和tblContact
之间的关系。假设它们由name
链接,您可以更清楚地重写查询,如:
update c
set countryId = lc.Id
from SQLVersion.dbo.Contact c
join AccessDBVersion.dbo.tblContact ac
on ac.Name = c.Name
join SQLVersion.dbo.Country lc
on lc.Name = ac.Country