SSIS动态栏

时间:2018-11-15 16:16:22

标签: sql-server ssis dynamic-sql

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

这是我的代码。

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

有人有幸吗?

1 个答案:

答案 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))"