2015-11-05 4 views
0

Я пытаюсь внедрить волну обновлений на удаленный сервер. Вот запрос я использую:Обновление таблицы удаленного сервера

update openquery(portal_mysql2, 'select * from memberstest_SL') 
    set fte_actual= (select [Full-time_enrollment] 
        FROM [BIDEV].[dbo].[TBL_IPEDS_HISTORY_NEW] 
        inner join openquery(Portal_mysql2, ' select * from memberstest_SL') on cast(unitid as varchar) = Right(nces_agencyid, 6) 
        where [year] = Year(GetDate())-2 
         and [Full-time_enrollment] <> '0' 
         and [Full-time_enrollment] is not null 
         and cast(unitid as varchar) = Right(nces_agencyid, 6) 
        ) 

Это возвращает ошибку:

subquery returned more than one value

Который имеет смысл, потому что я пытаюсь обновить несколько записей с их соответствующими значениями в исходной таблице.

Кто-нибудь знает, как я могу это достичь?

+0

об ошибке: Попробуйте использовать 'выберите TOP 1 [Full-time_enrollment]' в вашем подзапрос. Если вы не получите желаемый результат, вы должны изменить логику обновления – Marusyk

+0

, используя top (1), заменит все в запросе на это первое значение; это не то, что я ищу делать – slevin37

+0

Хорошо, тогда вам нужно больше объяснить, что вы хотите. Попробуйте использовать инструкцию UPDATE SELECT – Marusyk

ответ

0

Пожалуйста, попробуйте использовать что-то вроде этого:

update qe 
set fte_actual = Full-time_enrollment 
from openquery(portal_mysql2, 'select * from memberstest_SL') qe 
     inner join [BIDEV].[dbo].[TBL_IPEDS_HISTORY_NEW] tab on CAST(unitid as varchar) = RIGHT(nces_agencyid, 6) 
where year = YEAR(GETDATE()) - 2 
and ISNULL(Full-time_enrollment, '0') != '0' 
and CAST(unitid as varchar) = RIGHT(nces_agencyid, 6) 
+0

Большое спасибо за ваше предложение. Это действительно имеет смысл, но оно передает мне это сообщение об ошибке: Поставщик OLE DB «MSDASQL» для связанного сервера «portal_mysql2» не смог обновить таблицу «[MSDASQL]». В наборе строк использовался оптимистичный параллелизм, и значение столбца было изменено после того, как содержащая строка была последней выбрана или повторно синхронизирована. – slevin37