问一个SSIS里边的变量集使用的问题

时间:2021-11-03 19:55:20
x表里边有
cols1
1
2
x1 表里边有
cols1    cols2    cols3
 1         2        3
 2         3        4
 3         4        5
 4         5        6
 6         7        8
 7         8        9
然后需要在SSIS里边实现如下功能:
SELECT * FROM X1 WHERE cols1 IN (SELECT cols1 FROM x)
要求条件:
不能在数据源里边直接用代码表示。必须每个步骤需要用SSIS里边的控键表示。
我的想法是用object类型的变量得到SELECT cols1 FROM x 里边的cols1的数据,然后在后面调用,但是调用变量做条件时候没有正确。
大家给我看看,给我一个好点的办法.

8 个解决方案

#1


前面看明白了。要求条件后面的全没看明白

#2


就是希望用变量得到这(SELECT cols1 FROM x)里边的结果
然后在后面调用这个变量
做成这种形式的
SELECT * FROM X1 WHERE cols1 IN = 这个变量集的值


#3


子查询的结果集可以用定义表变量,或用临时表来存放,再多次引用。
否则只能被相应的查询语句引用,不能被其它语句引用。
比如
tab
id name
1  aa
2  bb
3  aa

select * from (select count(id),name from [tab] group by name)a
union all select * from a
这就是错的。 
同样
select * from (select count(id),name from [tab] group by name)a
union all 
select * from (select count(id),name from [tab] group by name)a
虽然上面两个子查询别名相同,但union all前后的两条查询并没有关系,SQL不会报错说别名重复。
如果要多次引用(select count(id),name from [tab] group by name) 这个产生的行集,就将结果插临时表或表变量。

#4


在数据流中做

设置两数据数据源, 分别指向
A: SELECT * FROM X1
B: SELECT cols1 FROM x

对于数据源B, 增加一"聚合"的转换, 以去掉重复数据

增加一个"合并联接"的转换, 将数据源A和数据原B经过"聚合"转换的结果通过内联接关联.

这样就实现你的要求了.


这种方法相同于实现这样的sql:

select a.*
from x1, (select distinct id from x) b
where x1.id=x.id

#5


请教老大
A: SELECT ID FROM X1
之后,语句中如何使用这个A?
SELECT * FROM tb WHERE ID IN ????? A ???

#6


这种方法能够达到一样的效果,
那能不能用变量做出来呢?

#7


to: fcuandy(要学的东西还很多) 

我没有用变量, 我用的是转换相关的组件, 所以不存在你说的那个问题.

#8


用变量实现的话, 可能不太容易, 我知道通过脚本组件可以.

不通过脚本组件的话, 可能很难, SSIS包中能使用 object 类型变量的组件不多.

#1


前面看明白了。要求条件后面的全没看明白

#2


就是希望用变量得到这(SELECT cols1 FROM x)里边的结果
然后在后面调用这个变量
做成这种形式的
SELECT * FROM X1 WHERE cols1 IN = 这个变量集的值


#3


子查询的结果集可以用定义表变量,或用临时表来存放,再多次引用。
否则只能被相应的查询语句引用,不能被其它语句引用。
比如
tab
id name
1  aa
2  bb
3  aa

select * from (select count(id),name from [tab] group by name)a
union all select * from a
这就是错的。 
同样
select * from (select count(id),name from [tab] group by name)a
union all 
select * from (select count(id),name from [tab] group by name)a
虽然上面两个子查询别名相同,但union all前后的两条查询并没有关系,SQL不会报错说别名重复。
如果要多次引用(select count(id),name from [tab] group by name) 这个产生的行集,就将结果插临时表或表变量。

#4


在数据流中做

设置两数据数据源, 分别指向
A: SELECT * FROM X1
B: SELECT cols1 FROM x

对于数据源B, 增加一"聚合"的转换, 以去掉重复数据

增加一个"合并联接"的转换, 将数据源A和数据原B经过"聚合"转换的结果通过内联接关联.

这样就实现你的要求了.


这种方法相同于实现这样的sql:

select a.*
from x1, (select distinct id from x) b
where x1.id=x.id

#5


请教老大
A: SELECT ID FROM X1
之后,语句中如何使用这个A?
SELECT * FROM tb WHERE ID IN ????? A ???

#6


这种方法能够达到一样的效果,
那能不能用变量做出来呢?

#7


to: fcuandy(要学的东西还很多) 

我没有用变量, 我用的是转换相关的组件, 所以不存在你说的那个问题.

#8


用变量实现的话, 可能不太容易, 我知道通过脚本组件可以.

不通过脚本组件的话, 可能很难, SSIS包中能使用 object 类型变量的组件不多.