2015-11-05 90 views
0

我正試圖對遠程服務器實施一波更新。下面是我使用的查詢:這是有道理的,因爲我想在源表中對應的值更新多條記錄正在更新遠程服務器表

subquery returned more than one value

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

這是返回錯誤。

任何人都知道我可以做到這一點?

+0

關於錯誤:嘗試使用'你的子查詢中選擇TOP 1全time_enrollment]'。如果你沒有得到期望的結果,那麼你應該改變更新的邏輯 – Marusyk

+0

使用頂部(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

非常感謝您的建議。這確實有很大的意義,但它給我帶來了這個錯誤信息: 鏈接服務器「portal_mysql2」的OLE DB提供程序「MSDASQL」無法更新表「[MSDASQL]」。行集使用樂觀併發,並且在包含的行最後獲取或重新同步後,列的值已更改。 – slevin37