1

Accessデータベースからインポート/エクスポートウィザードを使用して作成されたSQLサーバーデータベースが1つあります。次に、Accessデータベースに基づくがスキーマが少し異なる別のSQLデータベースがあります。単純なAccessベースのデータベースからより複雑なSQLサーバースキーマデータベースにデータを取得しようとしています。Accessデータベースは、国をテキストとしてContactテーブルに格納するだけで、新しいスキーマでは、ContactテーブルにCountryテーブルにリンクするCountryIdがあります。私はこれを行うために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);

これは機能しません:

サブクエリは複数の値を返しました。サブクエリが=、!=、<、<=、>、> =の後に続く場合、またはサブクエリが式として使用される場合、これは許可されません。

このエラーがスローされる理由は理解できますが、ルックアップで見つかった値で各行を更新できる正しいSQLを作成する方法がわかりません。誰か助けてもらえますか?

4

1 に答える 1

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
于 2012-06-29T12:45:12.383 に答える