无法获得约束以在ForEach循环中处理SQL任务

时间:2019-05-24 09:09:19

标签: sql-server ssis etl

我正在尝试执行一个非常基本的过程:

  • (重置)截断表
  • 浏览文件文件夹
  • 检查以查看FILES表中是否存在文件名
  • 如果没有,则将文件中的数据导入到数据表中
  • 将FileName插入FILES表

我可以让它遍历文件的文件夹,加载它们,然后将文件名插入表中。但是,我无法使约束起作用,因此它只能加载FILES表中尚未存在的文件。

这是我的总体设置:

enter image description here

变量:

enter image description here

这是ForEach循环设置:

enter image description here enter image description here

“表中存在文件” SQL任务:

enter image description here enter image description here enter image description here

我尝试过:

SELECT COUNT(id) as id FROM PORG_Files WHERE filename = ?

我还尝试了SqlStatementSource表达式:

"SELECT COUNT(id) as id FROM PORG_Files WHERE filename = '" + @[User::CurrentFileName] + "'"

但是我不确定使用表达式时在General下的SQLStatement怎么办。

这里是永远看起来都是真的约束:

enter image description here

我认为问题出在路径格式中,变量具有双\ s,但是用REPLACE进行更正后,它不起作用。

为了达到良好的效果,这是“将文件插入表中” SQL任务:

enter image description here enter image description here enter image description here

将文件插入表就好了,这是表的外观:

enter image description here

我到底在做什么错?!?!

谢谢!

3 个答案:

答案 0 :(得分:1)

您是否尝试将ResultName id更改为 0

您可以查看documentation以供参考。 enter image description here

答案 1 :(得分:0)

更改输入参数的大小

请尝试在“执行SQL任务”中增加输入参数的大小,因为100可能会导致截断。对于文件路径,我将其设置为1000。

使用表达式

  

但是我不确定在使用Expression时如何处理General下的SQLStatement

使用表达式时,“常规”选项卡中的SQLStatement没有任何值,因为它在运行时已更改。

答案 2 :(得分:0)

最终有几件事。

  • 约束确实需要使用@ [User :: id] == 0
  • 我需要在SQL任务的查询中使用@ [User :: CurrentFileName]
  • 我在查询中不需要替换

谢谢你,没有很多想法,我可能还没想通!