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 = 这个变量集的值
然后在后面调用这个变量
做成这种形式的
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) 这个产生的行集,就将结果插临时表或表变量。
否则只能被相应的查询语句引用,不能被其它语句引用。
比如
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
设置两数据数据源, 分别指向
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 ???
A: SELECT ID FROM X1
之后,语句中如何使用这个A?
SELECT * FROM tb WHERE ID IN ????? A ???
#6
这种方法能够达到一样的效果,
那能不能用变量做出来呢?
那能不能用变量做出来呢?
#7
to: fcuandy(要学的东西还很多)
我没有用变量, 我用的是转换相关的组件, 所以不存在你说的那个问题.
我没有用变量, 我用的是转换相关的组件, 所以不存在你说的那个问题.
#8
用变量实现的话, 可能不太容易, 我知道通过脚本组件可以.
不通过脚本组件的话, 可能很难, SSIS包中能使用 object 类型变量的组件不多.
不通过脚本组件的话, 可能很难, SSIS包中能使用 object 类型变量的组件不多.
#1
前面看明白了。要求条件后面的全没看明白
#2
就是希望用变量得到这(SELECT cols1 FROM x)里边的结果
然后在后面调用这个变量
做成这种形式的
SELECT * FROM X1 WHERE cols1 IN = 这个变量集的值
然后在后面调用这个变量
做成这种形式的
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) 这个产生的行集,就将结果插临时表或表变量。
否则只能被相应的查询语句引用,不能被其它语句引用。
比如
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
设置两数据数据源, 分别指向
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 ???
A: SELECT ID FROM X1
之后,语句中如何使用这个A?
SELECT * FROM tb WHERE ID IN ????? A ???
#6
这种方法能够达到一样的效果,
那能不能用变量做出来呢?
那能不能用变量做出来呢?
#7
to: fcuandy(要学的东西还很多)
我没有用变量, 我用的是转换相关的组件, 所以不存在你说的那个问题.
我没有用变量, 我用的是转换相关的组件, 所以不存在你说的那个问题.
#8
用变量实现的话, 可能不太容易, 我知道通过脚本组件可以.
不通过脚本组件的话, 可能很难, SSIS包中能使用 object 类型变量的组件不多.
不通过脚本组件的话, 可能很难, SSIS包中能使用 object 类型变量的组件不多.