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

SSIS Precedence Constraint Not Working Due to Path Formatting

使用 SSIS 和 MS-SQL Server 2012

我有一个 SQL 任务正在执行:

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

除了 0 之外它从来没有 returns 任何东西,因为 SSIS 文件名看起来像:

\\erp\shares\Save\item_1168.txt

Table 中的文件名看起来像:

\erp\shares\Save\item_1168.txt

我不认为我想像那样将文件名插入到 table 中,所以 how/where 我要格式化以便我可以进行匹配以获得依赖于此的约束火。

谢谢!

好的,如果我 运行 这个查询在 SQL 管理器中它有效。

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

当我将等价物放入 SQL 语句的 SQL 任务编辑器时,它仍然是 returns 0

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

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

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

解决方法 - 表达式

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

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

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