首页 > 解决方案 > 根据星期几控制 SP 代码流

问题描述

我有一个 SSIS 包,它执行一个包含条件的 SP:

if (DATEPART(dw,GETDATE()) != 2 OR DATEPART(dw,GETDATE()) != 4 OR DATEPART(dw,GETDATE()) != 6) 
    return 0
...

我期待如果是星期一、星期三或星期五,那么 SP 会继续做事,否则它会return 0,仅此而已。

然而,这个条件似乎每天都成功,并且 SP 总是返回 0 并且什么都不做。我很困惑。

我如何让它识别 MWF 并继续,否则停止?

谢谢

标签: sql-servertsql

解决方案


错误(如果我正确理解您的问题)在于您的病情逻辑。我的猜测是你实际上需要ANDs 而不是ORs。可以简化为IN/ NOT IN

declare @dw smallint

set @dw = DATEPART(dw,GETDATE())

if @dw in (1, 3, 5, 7)
  return 0

或者

...
if @dw not in (2, 4, 6)
  return 0

请注意,有一个DATE_FIRST选项可以更改工作日顺序(数字)。

PS 一些描述: if (DATEPART(dw,GETDATE()) != 2 OR DATEPART(dw,GETDATE()) != 4 OR DATEPART(dw,GETDATE()) != 6) 这个条件总是正确的,因为一天不能同时是一周的第 2 天、第 4 天和第 6 天。如果是一周的第二天,则第一个条件“失败”,而下一个条件成功,因为2 != 4.


推荐阅读