[英]SSIS Execute SQL Task contain Insert Into and Select
我正在尝试读取文件名,然后将每个名称与另一个相似的单元格值一起输入到另一个表列中。 在 For Each 循环中,然后我有执行 SQL 任务。 当前任务设置为直接输入。 这是问题脚本
INSERT INTO TableB
(LoopValue, Columnvalue)
VALUES (?, N'Select Columnvalue from TableA where Columnvalue like ?')
你有一个 for each 循环文件,据我所知? 当我遇到这种情况时,我只需使用 foreach 循环的“变量映射”设置,使用索引 0 将当前文件映射到 fileName 变量。
然后我使用派生列创建一个数据流任务,该列只是您的 fileName 变量。 如果我理解正确,将它与 OLE DB 目标结合使用应该足以将值插入表中?
编辑:哦,你也想创建一个字符串吗? 您可以使用表达式任务在控制流中实现这一点。 分配一个字符串变量,例如“queryString”,然后有:
@queryString = "Select " + @[User::fileName] + " from Table B"
或类似的东西,即使用 "" 插入“硬编码”值和 + 后跟您的变量来连接您的变量。 然后,您还可以在数据流中为 @queryString 变量使用派生列。
如果我了解您要执行的操作,即插入到 TableB 中,从 TableA 中选择记录,其中 ColumnValue 就像传入的值,那么您就接近了。
您现在拥有的方式是Select Columnvalue from TableA where Columnvalue like ?
插入Select Columnvalue from TableA where Columnvalue like ?
的文字字符串, Select Columnvalue from TableA where Columnvalue like ?
到你的桌子上。
像这样调整你的语句:
INSERT INTO TableB (LoopValue, Columnvalue)
SELECT ?, Columnvalue FROM TableA WHERE Columnvalue LIKE '%' + ? + '%' --% is a wildcard. If you only want those that begin or end then remove one or the other %
然后确保您传递了两次该值。 由于有多个?
这与参数的数量有关,但您可以传递它两次,因为您在两个不同的地方使用相同的值:
然后参数名称将从 0 开始并递增以匹配?
在你的陈述中。 根据您的连接类型可能会有所不同,以下文档中有一节会告诉您它应该是什么执行 SQL 任务
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.