【发布时间】:2018-11-20 18:17:34
【问题描述】:
我想使用 SSIS 根据另一个表中的行动态选择列
示例:我有表 A,其中有我要查询的列的名称。所以我想查询表 B 中名称存储在表 A 中的列。
我在 SQL 查询中找到了一种方法,但我不知道如何在 SSIS 中这样做。
DECLARE @columnList VARCHAR(MAX),@sql VARCHAR(MAX)
SELECT @columnList = COALESCE(@columnList+',' ,'') + columnName
FROM [dbo].[tableA]
SET @sql = 'SELECT ' + @columnList + ' FROM dbo.TableB'
EXEC(@sql)
有什么建议吗?
谢谢
【问题讨论】:
-
您的动态 SELECT 是否会产生相同数量的列且每列的数据类型相同?
-
如果表 B 是一个 SQL 表,我会使用信息模式,因为你可以得到 DATA_TYPE 这很好
-
不@SamKolli,列数是可变的,但它们都是相同的类型
-
如果元数据在运行时发生变化,您将无法重用相同的数据流。如果您想坚持使用 SSIS,可以使用 BIML 或 SSIS 对象模型以编程方式生成包。如果是对象模型,请尝试 EzAPI 或我的库(例如:github.com/samskolli/Pegasus/blob/master/Pegasus.Demo/…;适当替换代码)。
标签: sql sql-server dynamic ssis