繁体   English   中英

SSIS 执行 SQL 任务包含插入和选择

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM