SQL Server加入困难

时间:2014-07-03 15:40:04

标签: sql-server

我很难完成以下任务:

我有2个SQL Server表:ImportLog和TShipping。

我的应用程序在TShipping表中插入了很多行(例如10行)

 TShipping(TShipping_ID int, TShipping_CreationDate datetime) 

并且(在该过程结束时,即在几毫秒之后),插入1行 进入ImportLog表

 ImportLog(ImportLog_Date datetime, importlog_Nb int).

在TShipping表格中,我还有一个字段:

importlog_Nb int

我想使用importlog表的importlog_Nb值(即importlog.importlog_Nb)更新此字段(TShipping表的importlog_Nb,即TShipping.importlog_Nb)

因此难以找到,对于TShipping表中的每一行,importlog表中的行具有最接近的ImportLog_Date到TShipping_CreationDate(最接近的是> = not< =因为在TShipping表之后填充了importlog表)。

Remarque:每次进程运行时,它会在TShipping表中插入很多行,在ImportLog表中只插入1行。

如果有人可以在不使用游标的情况下给我一个简单的代码(因为TShipping表非常庞大)。

创建表TShipping(TShipping_ID int TShipping_CreationDate datetime,ImportLog_Nb int)

创建表ImportLog(ImportLog_Date datetime,ImportLog_Nb int)

1 个答案:

答案 0 :(得分:0)

UPDATE t
    set t.importlog_Nb = i.importlog_Nb
FROM TShipping t
OUTER APPLY
(
    SELECT TOP 1 i.importlog_Nb, i.ImportLog_Date 
    FROM ImportLog i
    WHERE i.ImportLog_Date >= t.TShipping_CreationDate
    ORDER BY i.ImportLog_Date ASC
) i

这会在发货后拉出最近的导入日志日期并指定它