【问题标题】:SSIS Execute SQL Task contain Insert Into and SelectSSIS 执行 SQL 任务包含插入和选择
【发布时间】:2020-10-27 01:06:15
【问题描述】:

我正在尝试读取文件名,然后将具有另一个相似单元格值的每个名称连续输入到另一个表格列。在 For Each 循环中,我有执行 SQL 任务。当前任务设置为直接输入。这是问题脚本

INSERT INTO TableB
                  (LoopValue, Columnvalue)
VALUES     (?, N'Select Columnvalue from TableA where Columnvalue like ?')

【问题讨论】:

  • 期望您得到的不是存储在 Columnvalue 中的文字字符串 Select Columnvalue from TableA where Columnvalue like ? 之外的其他内容?是这个问题吗?
  • 这是一个子选择还是你想插入 sql 脚本文本? “从 TableA 中选择 Columnvalue,其中 Columnvalue 像?”如果是子选择,则将 ' 更改为 (
  • 我遇到此错误消息 [执行 SQL 任务] 错误:执行查询“INSERT INTO TableB (LoopValue, Columnvalue)”失败,出现以下错误:“')' 附近的语法不正确。”。可能的失败原因:查询有问题,“ResultSet”属性设置不正确,参数设置不正确,或者连接没有正确建立。 >>>> 我想将 Select 值插入到表中
  • 我还建议先让您的查询在 SSMS 中工作。如果您在转换时遇到问题,请发布有效的 SSMS 查询,我们可以帮助您进行转换
  • 生成的数据集是什么样的?请发一个例子

标签: sql ssis sp-executesql


【解决方案1】:

据我所知,您对文件有一个 for each 循环?当我遇到这种情况时,我只需使用 foreach 循环的“变量映射”设置,使用索引 0 将当前文件映射到 fileName 变量。

然后我创建一个带有派生列的数据流任务,该列就是您的文件名变量。将其与 OLE DB 目标结合使用应该足以将值插入表中,如果我理解你正确吗?

编辑: 哦,你也想创建一个字符串?您可以使用表达式任务在控制流中实现这一点。分配一个字符串变量,例如“queryString”,然后有:

@queryString = "Select " + @[User::fileName] + " from Table B" 

或其中的一些内容,即使用“”插入“硬编码”值和一个 + 后跟你的变量来连接你的变量。然后,您也可以在数据流中为 @queryString 变量使用派生列。

【讨论】:

    【解决方案2】:

    如果我了解您正在尝试执行的操作,即从 TableA 中选择 ColumnValue 类似于传入值的记录插入 TableB,那么您就很接近了。

    您现在的方式是将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 开始并递增以匹配您语句中的 ?。根据您的连接类型可能会有所不同,以下文档中有一个部分告诉您应该是什么Execute SQL Task

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多