由于路径格式,SSIS优先约束不起作用

时间:2019-05-22 08:32:15

标签: sql sql-server ssis etl execute-sql-task

使用SSIS和MS-SQL Server 2012

我有一个执行的SQL任务:

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

因为SSIS文件名看起来像这样,所以它从不返回0以外的任何内容:

\\\\erp\\shares\\Save\\item_1168.txt

表中的文件名看起来像:

\\erp\shares\Save\item_1168.txt

我不认为我想像那样将文件名插入表中,因此如何/在何处格式化以便可以进行匹配以获取依赖于此的约束

谢谢!

enter image description here

enter image description here

好吧,如果我在SQL Manager中运行此查询,那么它将起作用。

SELECT COUNT(id) as id FROM PORG_Files WHERE filename = REPLACE('\\\\erp\\shares\\Save\\item_1168.txt','\\','\')

当我将等效项放入SQLStatement的SQL任务编辑器中时,它仍返回0

SELECT COUNT(id) as id FROM PORG_Files WHERE filename = REPLACE(?,'\\','\')

2 个答案:

答案 0 :(得分:1)

您只是将文件名直接存储在变量中吗?如果您将文件名存储为字符串变量的表达式,则输出格式将与您描述的相同。 4个正斜杠(\)的结果将仅为2,而2个\将是单个斜杠。这是因为必须在SSIS表达式中转义正斜杠。在变量的“表达式”字段中,单击省略号,然后在双引号中输入文本以使其成为表达式,例如下面的示例。

“\\\\erp\\shares\\Save\\item_1168.txt”

答案 1 :(得分:1)

解决方法-表达式

尝试使用表达式而不是传递参数:

在“执行SQL任务”的“转到表达式”选项卡中,为SQLStatementSource属性添加表达式,如下所示:

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