在SSIS项目中,我构建表达式以创建具有前一工作日日期的连接字符串。例如,如果今天是星期一,我将从星期五开始收集文件。如果今天是星期二,我将从周一拿起文件,依此类推。
对于我从3天前收集文件的星期一示例,我创建了以下成功的表达式:
(DT_WSTR, 2)DATEPART( "mm", GETDATE())==(DT_WSTR, 2)DATEPART( "mm",DATEADD( "dd" , -3, GETDATE() ) ) ? "\\\\Sfa14\\tsibwdfa$\\EPSI Extracts\\Daily_Rec_Counts\\BWH_EPSI_Rec_Cnt_"+(DT_WSTR, 4) DATEPART( "yyyy",GETDATE() )+Right("0"+(DT_WSTR, 2)DATEPART( "mm", DATEADD( "dd" , -0, GETDATE() ) ),2)+Right("0"+(DT_WSTR, 2)DATEPART( "dd", DATEADD( "dd" , -3, GETDATE() ) ) ,2): "\\\\Sfa14\\tsibwdfa$\\EPSI Extracts\\Daily_Rec_Counts\\BWH_EPSI_Rec_Cnt_"+(DT_WSTR, 4) DATEPART( "yyyy",GETDATE() )+Right("0"+(DT_WSTR, 2)DATEPART( "mm", DATEADD( "mm" , -1, GETDATE() ) ),2)+Right("0"+(DT_WSTR, 2)DATEPART( "dd", DATEADD( "dd" , -3, GETDATE() ) ) ,2)+".txt"
评估为\ Sfa14 \ tsibwdfa $ \ EPSI Extracts \ Daily_Rec_Counts \ BWH_EPSI_Rec_Cnt_20160429.txt。
对于前一天我只回顾的例子,我使用相同的结构来创建以下代码,其中-3s已经改为-1s。
(DT_WSTR, 2)DATEPART( "mm", GETDATE())==(DT_WSTR, 2)DATEPART( "mm",DATEADD( "dd" , -1, GETDATE() ) ) ? "\\\\Sfa14\\tsibwdfa$\\EPSI Extracts\\Daily_Rec_Counts\\BWH_EPSI_Rec_Cnt_"+(DT_WSTR, 4) DATEPART( "yyyy",GETDATE() )+Right("0"+(DT_WSTR, 2)DATEPART( "mm", DATEADD( "dd" , -0, GETDATE() ) ),2)+Right("0"+(DT_WSTR, 2)DATEPART( "dd", DATEADD( "dd" , -1, GETDATE() ) ) ,2): "\\\\Sfa14\\tsibwdfa$\\EPSI Extracts\\Daily_Rec_Counts\\BWH_EPSI_Rec_Cnt_"+(DT_WSTR, 4) DATEPART( "yyyy",GETDATE() )+Right("0"+(DT_WSTR, 2)DATEPART( "mm", DATEADD( "mm" , -1, GETDATE() ) ),2)+Right("0"+(DT_WSTR, 2)DATEPART( "dd", DATEADD( "dd" , -1, GETDATE() ) ) ,2)+".txt"
评估为\ Sfa14 \ tsibwdfa $ \ EPSI Extracts \ Daily_Rec_Counts \ BWH_EPSI_Rec_Cnt_20160501,不带.txt扩展名。我不确定为什么我会丢失.txt。
在尝试隔离时,我发现我的问题仅在于条件的布尔部分。将-3更改为-1是触发.txt被删除的原因。
我尝试了其他数值-2到-9,它们都创建了正确的字符串。 -0和-1是唯一丢弃.txt的。我已经验证布尔表达式的两边都计算为5,没有NULLS。
由于其他数值似乎正常工作,我想知道基于我设置布尔值的方式是否存在-0或-1的语法限制。
这是我的第一篇文章;如果我需要包含其他文档,请告诉我。非常感谢!
答案 0 :(得分:0)
我终于找到了这个问题。对于表达式的真实部分,我省略了+“。txt”。