2012-08-07 137 views
1

我已經有了更新的一些問題。並得到「多部分標識符找不到」,因爲我用另一個表中更新不同的數據庫,但現場使用是相同的。 你能幫我嗎?錯誤找不到

這裏是代碼:

UPDATE [interface].[dbo].[tre_bos_account_update] 
SET [interface].[dbo].[tre_bos_account_update].n_tre_bos_account_update_start_balance = [SasTempDB]..OLT_Balance_Update.StartOfDayBalance 
FROM (SELECT StartOfDayBalance from OLT_Balance_Update 
WHERE CONVERT(varchar(12), [sastempdb].dbo.OLT_Balance_Update.DateTrx) = CONVERT(varchar(12), GETDATE()))OLT_Balance_Update 
WHERE [SasTempDB]..OLT_Balance_Update.ClientNo = [interface].dbo.tre_bos_account_update.vc_tre_bos_account_update_account_no 

回答

2

OLT_Balance_Update是在發言派生表的別名,而不是數據庫的一部分。

從主查詢中引用OLT_Balance_Update的地方刪除[SasTempDB]..,並可能將其添加到派生表的from子句中。您還需要在派生表中添加ClientNo。

事情是這樣的:

UPDATE [interface].[dbo].[tre_bos_account_update] 
SET [interface].[dbo].[tre_bos_account_update].n_tre_bos_account_update_start_balance = OLT_Balance_Update.StartOfDayBalance 
FROM 
    (
    Select StartOfDayBalance, ClientNo 
    from [SasTempDB]..OLT_Balance_Update -- This is the actual table in [SasTempDB] 
    where CONVERT(varchar(12), [sastempdb].dbo.OLT_Balance_Update.DateTrx) = CONVERT(varchar(12), GETDATE()) 
) OLT_Balance_Update -- This is a table alias for a derived table 
WHERE OLT_Balance_Update.ClientNo = [interface].dbo.tre_bos_account_update.vc_tre_bos_account_update_account_no 

看着你查詢我猜想這是一個等價的。

update T 
set n_tre_bos_account_update_start_balance = O.StartOfDayBalance 
from interface.dbo.tre_bos_account_update as T 
    inner join SasTempDB.dbo.OLT_Balance_Update as O 
    on T.vc_tre_bos_account_update_account_no = O.ClientNo 
where O.OLT_Balance_Update.DateTrx >= dateadd(day, datediff(day, 0, getdate()), 0) and 
     O.OLT_Balance_Update.DateTrx < dateadd(day, 1+datediff(day, 0, getdate()), 0) 

getdate()dateadd/datediff招將刪除部分時間從日期和使用>=/=將會使SQL Server能夠使用上OLT_Balance_Update.DateTrx一個索引來查找需要的行比較。

+0

您好..非常感謝..它的工作:) – user1578404 2012-08-07 10:28:11