您好,我需要一些帮助。这将是我的第一个SSIS程序包,我正在学习中。到目前为止,这就是我所拥有的。
我创建了一个控制流。然后,我创建了三个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, call_date, 112) BETWEEN STARTDATE AND ENDATE
我已经阅读了几篇文章,并尝试执行所描述的内容,但并没有陷入其中。因此,请使用我的示例来告诉我如何执行此操作。如果我可以让程序包在运行时提示我输入日期,那将是很好的选择,但我很高兴能学习如何将变量传递给查询。
这是我知道的唯一解决方案,因为我只是SSIS包中的初学者,我希望有人可以帮助我
最佳答案
由于此处没有任何答案能真正回答问题(请注意ADO.NET源 ADOt.rstrong而不是OLE DB!),因此,这才是真正的答案。
在SSIS中,您无法参数化ADO.NET源代码。您必须使用一种解决方法。
幸运的是,解决方法很少。一种方法是创建行为类似于源代码的脚本组件并对其进行编码。但是,不能总是轻松地将现有资源转换为脚本,尤其是当他缺乏ADO.NET编程知识时。
还有另一种解决方法,那就是在ADO.NET源采取行动之前创建SQL查询。但是,当您打开ADO.NET源代码时,您会注意到数据访问模式不允许变量输入。那么,您如何进行?
您要动态设置ADO.NET源的SQL表达式,因此必须告诉数据流任务以使用Expression配置SSIS ADO.NET源组件。
要使长话短说(或不很短:),请执行以下操作:
在您的数据包中添加
对于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]) + "'"
高温超导
关于sql - 如何在ADO.NET Source SSIS中传递参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20093362/