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))"
我创建了从另一个 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))"