Проблемы с переносом из старой таблицы в новую - PullRequest
0 голосов
/ 14 ноября 2018

Я переношу данные из одной таблицы в другую.

В старой таблице использовался столбец varchar с именем City.

Новая таблица вместо названия города содержитстолбец int с именем CityId, потому что я создал новую таблицу только для городов.

В таблице "Мои города" есть следующие столбцы:

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

Спасибо.

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Попробуйте это:

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
0 голосов
/ 14 ноября 2018

наверное это то, что ты ищешь?

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 
...