SSIS:从字符串变量中过滤多个GUID作为数据流OLE源中的参数

时间:2012-07-19 13:19:32

标签: string variables ssis oledb guid

我有一个SSIS包,它从SQL表中获取新GUID列表。然后我将GUID切成一个字符串变量,以便我用逗号分隔它们。它们如何出现在变量中的一个例子是:

'5f661168-aed2-4659-86ba-fd864ca341bc','f5ba6d28-7283-4bed-9f11-e8f6bef225c5'

问题出在数据流任务中。我使用变量作为SQL查询中的参数来获取我的源数据,但我无法得到我的结果。 WHERE子句如下所示:

WHERE [GUID] IN (?) 

我收到一个无效的字符错误,所以我发现隐式转换不能像我想的那样使用GUID。我可以通过在GUID周围放置{}来解决这个问题,如果这是一个GUID,但是在运行时需要检索4或5个不同的GUID。

想象我可以解决这个问题:

WHERE CAST([GUID] AS VARCHAR(50)) IN (?)

但是这根本没有产生任何结果,在我目前的测试中应该有两个。

我认为必须有办法实现这一目标......我缺少什么?

1 个答案:

答案 0 :(得分:7)

你不能,至少不使用你提供的机制。

您无法连接值并使其与参数一起使用。

我很容易在这一点上被证明是错的,但如果能让它发挥作用,我会被诅咒。

如何使其有效?

诀窍就是去旧学校并通过字符串构建/连接来进行查询。

在我的包中,我定义了两个变量filterquery。过滤器将是您已经执行的连接。

查询将是一个表达式(右键单击,属性:将EvaluateAsExpression设置为True,表达式将类似于"SELECT * FROM dbo.RefData R WHERE R.refkey IN (" + @[User::filter] + ")"

在数据流中,然后从变量中将源更改为SQL Command。那里不需要映射。

基本的外观和感觉就像

enter image description here

OLE源查询

enter image description here