如何将SQL语句的结果存储为变量并在SSIS表达式中使用结果?

时间:2017-09-05 13:09:40

标签: ssis expression

我正在使用SSIS Data Flow Task将数据从一个表格传输到另一个表格。表A中的A列包含一个数字,我想在表B的B列中存储最后3位数字。

首先,我尝试通过简单的SELECT语句SELECT COLUMN_A FROM TABLE_A获取A列中的所有数据并存储在变量中。但是,当我想要查询的结果集时,变量将语句存储为字符串。我已将EvaluateAsExpression属性设置为False,但无济于事。

其次,我希望能够在Derived Column的{​​{1}}中使用此查询的结果来提取最后3位数,并将值存储在目标中的Column_B中。我的表达是:

Data Flow

我希望将其存储为字符串,因此存储(DT_STR,3,1252)RIGHT(@User::[VariableName],3)数据类型。

我在Table_B的Column_B中得到的所有内容都是(DT_STR,3,1252)语句的最后3个字符" E_A"。网上有很多有用的信息,包括YouTube视频,例如设置文件路径和服务器名称作为参数或变量,但我看不到许多与我的查询细节相关的信息。

我使用SELECT从平面文件中插入行数,但在此示例中,我想改用Execute SQL Task工具。

我做错了什么?感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

如果您没有使用该号码做任何其他事情,我更喜欢在SQL中完成所有工作。

select right(cast(ColA as varchar(20)),3) from tableA 
-- you can add another cast if you want it to be an int

在执行sql中使用它来结果set = single row。

将其映射到变量。

在数据流的派生列中,您可以将该变量设置为新列。

答案 1 :(得分:0)

感谢KeithL,我将来会使用一种解决方案,但我发现了另一种解决方案。

我删除了变量并在Transformation Editor的{​​{1}}框中删除了:

(DT_STR,3,1252)RIGHT((DT_STR,3,1252)Column_A,3)

在我的问题中,我无法将Table_A中的Column_A转换为字符串。 (DT_STR,3,1252)的第一次使用只是将目标列设置为string,以便不使用与我的情况int中的源相同的数据类型。

第二次使用(DT_STR,3,1252)实际上将Column_A从int转换为string

相关问题