1

使用 SSIS 和 MS-SQL Server 2012

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

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

它从不返回除 0 之外的任何内容,因为 SSIS 文件名如下所示:

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

表中的文件名如下所示:

\\erp\shares\Save\item_1168.txt

我不认为我想像那样将文件名插入到表中,所以我如何/在哪里格式化,以便我可以进行匹配以使我的约束依赖于此触发。

谢谢!

在此处输入图像描述

在此处输入图像描述

好的,如果我在 SQL 管理器中运行这个查询,它就可以工作。

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

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

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

2 回答 2

1

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

“\\\\erp\\shares\\Save\\item_1168.txt”
于 2019-05-22T13:18:32.507 回答
1

解决方法 - 表达式

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

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

"SELECT COUNT(id) as id FROM PORG_Files WHERE filename = '" + @[User::CurrentFileName] + "'" 
于 2019-05-22T21:28:28.597 回答