SSIS审核步骤遇到错误

时间:2019-12-10 19:59:46

标签: sql-server ssis

我在SSIS包中有一个步骤,我想用另一个表(T2)中最新行的信息更新执行日志(T1)中的最新行。

我在'Where'语句周围出现错误

UPDATE T1
SET 
    [Survey_Size] = ssd.[FileName]
    ,Survey_Start_Date = ssd.[Start_Date]
    ,Survey_End_Date = ssd.[End_Date]
    ,[EndTime] = getdate()
    ,loaded = 1
FROM (SELECT max(log_sk) AS maxSk FROM T1) A
JOIN (SELECT max(PK) AS maxPK FROM T2) SS 
JOIN (SELECT PK, [FileName], Start_Date, End_Date, Survey_Size FROM T2) ssd ON ss.maxPK = ssd.pk
WHERE log_sk = a.maxSk

表1看起来像这样:

log_sk | FileName | Survey_Size | Start_Date | End_Date

并且我想更新表2中的信息,如下表所示,其中FileName将是两者的连接键

PK | FileName | Start_Date | End_Date | Survey_Size

1 个答案:

答案 0 :(得分:0)

我使用CTE重写它,因为它效率更高且可读性更高。

;With LastT1 as (
    Select
        log_sk as ID,
        Survey_Size,
        Survey_Start_Date,
        Survey_End_Date,
        EndTime,
        loaded,
        ROW_NUMBER() over (order by log_sk Desc) as Row_No
    From T1
), LatestT2 as (
    Select
        PK as ID,
        [FileName],
        [Start_Date],
        End_Date,
        Survey_Size,
        ROW_NUMBER() over (order by PK Desc) as Row_No
    From T2
)
Update Source
Set
    Source.[Survey_Size] = LatestT2.[FileName],
    Source.Survey_Start_Date = LatestT2.[Start_Date],
    Source.Survey_End_Date = LatestT2.[End_Date],
    Source.[EndTime] = getdate(),
    Source.loaded = 1
From LastT1 as Source
Inner Join LatestT2 on Source.ID = LatestT2.ID and LatestT2.Row_No = 1
Where Source.Row_No = 1