我创建了从另一个表中的行填充的变量。它应该遍历每一行以生成我的下一个select语句。但是,SSIS不接受'+ @[User::ThisField]+'
作为其后期望的变量AS MyColName
。我不希望这样,因为它将返回列名,而不是它包含的实际值。
这是我的代码。
SELECT
ISNULL('+ (DT_I4)@[User::ThisID]+', 0) AS EEDFID,
'+ @[User::ThisField]+',
EeID
FROM
EeExtraDetails
有人有幸吗?
答案 0 :(得分:0)
那样行不通。假设所有@ [User :: ThisField]数据类型都相同,那么您的问题就是如何使用表达式。如果@ThisField的值为Col1且为数字,然后@ThisField变为Col2(即文本),则数据流将失败,因为元数据无法在运行时更改。
变量无法像现在那样在查询中起作用,但是您走在正确的道路上。而是定义一个新变量@[User::QuerySource]
,其数据类型为String并指定该值为表达式。这样,您的表情就会变得像现在一样。
"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))"