非链接数据库中不同表上的SSIS变量过滤器

时间:2019-04-24 05:59:02

标签: sql sql-server tsql ssis

我正在将excel中的数据集上载到本地服务器中,我们使用它来运行脱机查询,并希望使用该表中的信息对生产系统中的表进行过滤,这样我就可以通过过滤后的数据将表放到本地数据库中,而不是将整个表从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]

但这没用。

2 个答案:

答案 0 :(得分:2)

您可以使用表达式代替传递参数。

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

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

另一方面,如果我遇到类似的情况,我将使用查找转换代替SQL语句来执行此操作。

答案 1 :(得分:0)

首先,这里不需要链接服务器,它只是连接两个服务器的桥梁。

在这里我可能会遗漏一些明显的东西。您说您已将数据集加载到本地数据库,现在您想从包含这些帐户的产品中获取数据。

我的建议是创建一个数据流,并使用oledb源从prod获取数据。然后添加一个查找,该查找将连接到本地db中的数据集(以帐户身份加入,请确保您连接到本地db,并且将没有匹配的行重定向到没有匹配的输出)。 然后添加一个oledb目标,以将数据加载到本地数据库。