如何使用另一个数据库表作为SQL引用更新一个数据库表中的列值

时间:2012-06-29 12:40:59

标签: sql sql-server tsql sql-update

我有一个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,它允许它使用查找中找到的值更新每一行。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:4)

您似乎错过了ContacttblContact之间的关系。假设它们由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