我正在尝试创建一个 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