OLT_Balance_Update
是语句中派生表的别名,不是数据库的一部分。
[SasTempDB]..
从您在主查询中引用的位置删除,OLT_Balance_Update
并可能将其添加到派生表的 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)
dateadd
/datediff
技巧将getdate()
删除日期中的时间部分,并使用>=
/进行比较=
将使 SQL Server 能够使用索引OLT_Balance_Update.DateTrx
来查找所需的行。