首页 > 解决方案 > 非链接数据库中不同表上的 SSIS 变量过滤器

问题描述

我正在将一个数据集从 excel 上传到我们用来运行离线查询的本地服务器,并希望使用该表中的信息来过滤我们生产系统中的表,这样我就可以将过滤后的表拉到 out本地数据库,而不是将整个表从 prod 拉到我们的本地。我正在考虑创建一个包含字符串中所有帐号的变量,然后在 IN(?) 语句中使用它。这行得通,但它只拾取字符串中的第一个帐户,而不是其余的。

我无法在 prod 或任何东西中创建临时表,因为它仅针对 DBA 锁定。我在 SSIS 中尝试了一些东西,比如创建变量等,但没有奏效。我试图避免倾倒整个桌子。如果我必须这样做,我会将其设置为从有效的 from 字段更新以捕获新记录。

SELECT
*
FROM account_table
where [account number] in (?)

我创建了 ? 变量在单独的执行任务 SQL 框中?是

select
string_agg([account number], ', ')
from [distinct account_table].

我也试过:

select
string_agg([account number], ',')
from [distinct account_table]

但这没有用。

标签: sqlsql-servertsqlssisetl

解决方案


您可以使用表达式而不是传递参数。

打开Execute SQL Task编辑器,转到Expressions选项卡,为属性添加一个新表达式,SqlStatementSource如下所示:

"SELECT
 *
 FROM account_table
 where [account number] in ('" + 
 @[User::Variable] + "')"

另一方面,如果我面临类似的情况,我将使用查找转换来代替 SQL 语句。


推荐阅读