2016-04-28 1 views
0

У меня возникла проблема с попыткой обновить таблицу со значениями из другой таблицы, если совпадение не существует. Вот сценарий, у меня есть таблица участия, которая имеет около 250 тыс. Записей. Мне нужно найти законодательные округа, связанные с записями на основе кода zip + 4. В моей таблице участия есть код zip и zip4. Иногда у меня есть и то, и другое. Должен любить такие наборы данных. У меня есть вторая таблица, которая содержит все законодательные округа по 9-значным почтовым индексам. Я обновил набор данных и включил отдельные коды zip и zip4. Вот код, у меня есть:Я пытаюсь обновить таблицу на основе совпадений с другой таблицей, получив ошибку идентификатора многочастности

update 
     [ComEd].[dbo].[PP_FFR_BU] 
set 
     [Zip4] = 
(
    CASE 
     when 
      [Tim].[dbo].[PP_FFR_BU].[Zip] + [Tim].[dbo].[PP_FFR_BU].[Zip4] not in (select zip from [TimCIS].[dbo].[Legis_Districts]) 
     then 
     CASE 
      when [Tim].[dbo].[PP_FFR_BU].[Zip] = [TimCIS].[dbo].[Legis_Districts].[Zip5] and [Tim].[dbo].[PP_FFR_BU].[Zip4] <> [TimCIS].[dbo].[Legis_Districts].[Zip4] 
      then (select top 1 [ComEdCIS].[dbo].[Legis_Districts].[Zip4] from [TimCIS].[dbo].[Legis_Districts] where [Tim].[dbo].[PP_FFR_BU].[Zip] = [TimCIS].[dbo].[Legis_Districts].[Zip5]) 
      when len([Tim].[dbo].[PP_FFR_BU].[Zip])<5 
      then '0000' 
     end 
    end 
) 
where 
    [Tim].[dbo].[PP_FFR_BU].[Zip] + [Tim].[dbo].[PP_FFR_BU].[Zip4] not in (select zip from [TimCIS].[dbo].[Legis_Districts]) 

Сейчас я получаю сообщение об ошибке:

Msg 4104, Level 16, State 1, Line 11 The multi-part identifier "TimCIS.dbo.Legis_Districts.Zip4" could not be bound. Which equates to the when clause in the second CASE statement.

Если почтовый и zip4 в исходной таблице, в законодательной районной таблице, то мне нужно двигаться к следующей записи. Если zip находится в таблице, а zip4 не соответствует, мне нужно первое значение, которое соответствует. Если zip не существует в законодательной таблице, я хочу поставить «0000» в zip4 таблицы участия. Любое понимание было бы весьма благодарным.

+3

Вам нужно предложение 'FROM'. Чтобы таблица была распознана в запросе, она (обычно) должна сначала отображаться в 'FROM'. Я бы также рекомендовал табличные псевдонимы. –

ответ

0

В случае заявления у вас есть этот запрос:

then (select top 1 [ComEdCIS].[dbo].[Legis_Districts].[Zip4] from [TimCIS].[dbo].[Legis_Districts] where [Tim].[dbo].[PP_FFR_BU].[Zip] = [TimCIS].[dbo].[Legis_Districts].[Zip5]) 

Но эта часть не имеет смысла:

select top 1 [ComEdCIS].[dbo].[Legis_Districts].[Zip4] from [TimCIS].[dbo].[Legis_Districts] 

Вы выбираете столбец из таблицы, которая не находится в вашем из статьи. Они находятся в двух разных базах данных.

Смежные вопросы