SSIS 动态列

SSIS Dynamic Columns

我创建了从另一个 table 的行填充的变量。它应该遍历每一行以生成我的下一个 select 语句。但是,SSIS 不接受 '+ @[User::ThisField]+' 作为它期望 AS MyColName 之后的变量。我不想要这个,因为它将 return 列名而不是它包含的实际值。

这是我的代码。

SELECT 
    ISNULL('+ (DT_I4)@[User::ThisID]+', 0) AS EEDFID, 
    '+ @[User::ThisField]+', 
    EeID
FROM 
    EeExtraDetails

有没有人遇到过这个问题?

那是行不通的。假设所有 @[User::ThisField] 数据类型都相同,那么您的问题就是如何使用表达式。如果@ThisField 的值是 Col1,它是数字,然后 @ThisField 变成 Col2,它是文本,数据流将失败,因为元数据在运行时无法更改。

我的元数据没有改变,解释表达式部分

变量不会以您现在的方式处理查询,但您走在正确的道路上。相反,定义一个新变量 @[User::QuerySource],数据类型为字符串,并指定该值是一个表达式。然后你的表情就会变得和现在一样。

"SELECT ISNULL("
+ (DT_WSTR, 20)@[User::ThisID]
+ ", 0) AS EEDFID, "
+ @[User::ThisField] 
+ " AS MyFieldAlias "
+ ", EeID FROM EeExtraDetails "

SSIS 表达式语言中的字符串连接仅适用于字符串,因此我已明确将您的@User::ThisID 转换为字符串。如果我误解了它并且您打算使用 SSIS 表达式语言的 ISNULL 函数,那么这是一种不同的语法。无论如何,单击评估,您应该会看到您的查询对于设计时值是否大致正确。

我的元数据确实发生了变化

在这种情况下,您可以做的最好的事情是将@[User::ThisField] 的结果转换为 SQL 语句中的字符串,如

+ "CAST(", @[User::ThisField, " AS nvarchar(4000))"