在SSIS包中设置动态变量日

时间:2014-10-28 15:39:11

标签: sql-server variables ssis datepart

我希望你能帮助我!我非常感谢这里的帮助!

我尝试做的是创建SSIS包以将.TXT定界文件导入数据库。使用静态文件执行此操作的过程在我的脑海中是清楚的,但这里的事情是导入必须使用昨天,每天的文件来完成。 文件名具有以下结构:" Informe_De_Recupero_D141027" (日期部分为" 141027")。

我在SSIS包上创建了一个名为FileDateName的变量,其中包含以下表达式:

RIGHT( "00" + (DT_STR, 4 , 1252)DATEPART( "year" , GETDATE() ),2) + "" 
+ RIGHT( "00" + (DT_STR, 2 , 1252)DATEPART( "month" , GETDATE() ) , 2 ) 
+ "" + (DT_STR, 2 , 1252) DATEPART( "day" , getdate()-1) 

但-1在这种情况下不起作用。它会导致以下错误:

  

数据类型" DT_DBTIMESTAMP"不能与二元运算符一起使用" - "   不支持一个或两个操作数的类型   操作。要执行此操作,需要一个或两个操作数   使用强制转换操作符强制转换。

     

尝试设置二进制操作的结果类型" Getdate() - 1"失败,错误代码为0xc0047081   评估功能" DATEPART"失败,错误代码为0xc0047084

我该如何解决?你能再给我一个解决方案吗?

提前致谢!!

1 个答案:

答案 0 :(得分:1)

SSIS表达式语言不支持getdate() - 1。你必须使用DATEADD(),即

+ (DT_STR, 2 , 1252) DATEPART( "day" , Dateadd("day",-1,getdate())) 

此外,这应该针对每个日期部分进行。当你到达年初 - 141231时会发生什么,将转化为150131。

最后,在执行SQL任务中执行此操作会更容易:

Select Right(Convert(char(8), getdate()-1,112),6)