2012-08-07 107 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