0

我正在尝试创建一个 SSIS 包,它通过根据包变量 (User::LastUpdate) 检查表中的日期字段 (MODIFYDATE) 从数据库中提取一组记录。MODIFYDATE 等于或在 LastUpdate 之后的记录被选中。

我已经尝试了这两种方法,使用 DateDiff 和返回一点的 UDF(两者都使用 Second 作为间隔),并且两种方式都遇到了同样的问题。日期匹配似乎推迟了两天。

如果 LastUpdate 设置为 1/22/2013 0:00,则应返回两条记录,一条 MODIFYDATE 为 1/22/2013 14:47,另一条 MODIFYDATE 为 1/22/2013 15:34。但除非 LastUpdate 设置不迟于 2013 年 1 月 20 日 12:00,否则这些都不会返回。如果它设置得比这更早,它们都会被退回。如果以后,两者都不会被退回。

这些行正在 SSIS 包中的 OLE DB 源组件中提取。如果我进入查询生成器并从那里运行查询,手动提供日期,则会返回正确的行。我插入了一个断点并确认 LastUpdate 包含正确的提取行日期(LastUpdate 的值由包中较早的存储过程提供)。

这是现在的查询。

SELECT ACTIVITIES.*
FROM ACTIVITIES LEFT OUTER JOIN
ArchivedEvents ON ACTIVITIES.FBC_EVENTSID = 
    ArchivedEvents.FBC_EVENTSID
WHERE (dbo.IsDateInOrder(?, ACTIVITIES.MODIFYDATE) = 1) OR
(dbo.IsDateInOrder(?, ArchivedEvents.MODIFYDATE) = 1)

我创建的功能

CREATE FUNCTION [dbo].[IsDateInOrder] 
(
    @Date1 DateTime,
    @Date2 DateTime
)
RETURNS bit
AS
BEGIN
    DECLARE @retval bit

    if DATEDIFF(s, @Date1, @Date2) >= 0
        SET @retval = 1
    else
        SET @retval = 0

    RETURN @retval

END

GO
4

0 回答 0