我正在使用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
工具。
我做错了什么?感谢任何帮助。
答案 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
。