SSIS包运行没有错误 - 不移动任何数据

时间:2016-06-10 15:35:41

标签: sql-server ssis

我有一个非常简单的SSIS包。它针对SQL Server数据库运行。开始时间设置为DATEADD(hh,-6,GETDATE())并拉取记录,进行2次简单数据转换并将它们放在另一个SQL表中。

预定每6小时(凌晨1点,早上7点,下午1点和晚上7点)运行。它每次都有效 - 除非是晚上7点。晚上7点,它不返回任何数据,也没有错误。如果我将日期硬编码为晚上7点,它会毫无问题地运行并正确填充数据。

我已经尝试过我能想到的一切 - 我已经删除了这项工作并重新创建了它,我已经安排它专门运行4次,我已经预定了它每6小时运行一次。我很难过。

任何人对我的问题可能有什么想法?

编辑: 这是代码。但是当我把时间放在晚上7点时它起作用,并且它每隔一段时间就有效。

SELECT AlarmDetail.Priority, Comment.Comment, AlarmDetail.EventStamp, AlarmMaster.GroupName
FROM AlarmDetail 
INNER JOIN Comment ON Comment.CommentId = AlarmDetail.CommentId 
INNER JOIN AlarmMaster ON AlarmMaster.AlarmId = AlarmDetail.AlarmId
WHERE        
AlarmDetail.EventStamp > DATEADD(hh,-6,GETDATE())
AND AlarmDetail.EventStamp < dateadd(hour,13,DATEDIFF(d,0,getdate())) 
AND AlarmDetail.AlarmState = 'UNACK_ALM'
AND AlarmDetail.Priority <= 3

3 个答案:

答案 0 :(得分:1)

我认为查询错了。如果您执行此代码:

select DATEADD(hh,-6,cast('2016-06-10 19:00:00' as datetime)), dateadd(hour,13,DATEDIFF(d,0,cast('2016-06-10 19:00:00' as datetime)))

<强>输出

2016-06-10 13:00:00.000 2016-06-10 13:00:00.000

这种情况总会给你一个空洞的结果:

AlarmDetail.EventStamp > DATEADD(hh,-6,GETDATE())
AND AlarmDetail.EventStamp < dateadd(hour,13,DATEDIFF(d,0,getdate())) 

答案 1 :(得分:0)

您在查询条件中使用了6小时的跨度,并且您每6小时运行一次该作业。由于您不提供样本数据和查询,因此只能推测:   - 您需要检查WHERE标准,并重新考虑毫秒很重要的事实。

答案 2 :(得分:0)

WHERE AlarmDetail.EventStamp > DATEADD(hh,-6,GETDATE())
AND AlarmDetail.EventStamp < dateadd(hour,13,DATEDIFF(d,0,getdate())) 

你意识到这一点,“EventStamp是在六小时前和今天下午一点之后的地方。”

晚上7点之前的六个小时是下午1点,所以如果你在晚上7点运行它,你会在下午1点之前和下午1点之后找到EventStamps。如果它在晚上7点之后运行,它将永远不会返回任何东西。

您还需要注意DATEADD(hh,-6,GETDATE())仍然有一个包含分钟和秒的时间组件,并且没有时间安排程序是完全精确的。如果您在下午1:00:38运行它,您将在7:00:38 AM之后获得活动。如果您上次运行任务,则会在上午7:00:05执行,然后您缺少33秒的事件。同样,如果后续运行时间是07:00:10 PM,您将捕获28秒的事件两次。显然,我不知道你需要它,但是如果你期望总是只捕获一次事件,那么这个查询并不能保证。