我创建了一个控制流程.然后我创建了三个ADO.Net连接,两个源和一个目的地.然后,我创建了数据流任务,它将数据从一个数据库中的表复制到同一服务器上另一个数据库中的对应表中.数据流任务具有2个ADO NET Source和ADO NET Destination.目的地只是将字段映射到一起.
好的,到目前为止这么好.这是我的问题.一些源查询具有日期标准.一个例子是:
SELECT --Code Here WHERE CONVERT(varchar,call_date,112) BETWEEN '6/1/2013' AND '7/1/2013'
我想用变量替换这些硬编码的日期.就像是:
WHERE CONVERT(varchar,112) BETWEEN STARTDATE AND ENDATE
我已经阅读了几篇文章,并尝试着做正在描述的内容,但它并没有下沉.所以请用我的例子告诉我如何做到这一点.这将是很好,如果我可以有包提示我的日期,当我运行它,但我会很高兴只是为了学习如何传递一个变量到查询.
这是我唯一的解决方案,因为我只是SSIS包中的初学者,希望有人可以帮助我
解决方法
在SSIS中,您无法参数化ADO.NET源.您必须使用解决方法.
幸运的是,几乎没有解决办法.一个将创建脚本组件,其行为像源代码一样.然而,不能总是轻松地将现有资源转换为脚本,特别是当他缺少ADO.NET编程知识时.
还有另一种解决方法,那就是在ADO.NET Source采取行动之前创建sql Query.但是,当您打开ADO.NET源时,您会注意到数据访问模式不允许变量输入.那么,你如何进行
您想要动态设置ADO.NET源的sql表达式,因此您必须通过使用Expression来告诉您的数据流任务来配置SSIS ADO.NET源组件.
为了使长篇小说(或不是很短的:),请执行以下操作:
>在您的包中,使用源/目标组件输入数据流任务
>点击背景上的任意位置,在“属性”面板中显示“任务”属性
>在“属性”面板中查找“表达式”属性,可以配置各种数据源/目标属性,并使用省略号按钮(…)打开它
>在属性下,选择您的源的sql Command属性(例如[ADO.NET source].[sqlCommand])来添加一行
>单击省略号按钮以打开表达式生成器
>在表达式构建器中构建动态查询
date / datetime参数的最后一步可能有点麻烦.但是,为了方便起见,以下为例:
"SELECT * FROM YOUR_SOURCE_TABLE WHERE your_date_column = '" + (DT_WSTR,4)YEAR(@[User::VAR_CONTAINING_DATE]) + "-" + (DT_WSTR,2)MONTH(@[User::VAR_CONTAINING_DATE]) + "-" + (DT_WSTR,2)DAY(@[User::VAR_CONTAINING_DATE]) + "'"
HTH