SSIS 导出数据文件,能否在第一列增加一个行号

0
使用SSIS把视图中的数据定时导出TXT文件,因为视图中做自增列比较麻烦,能否在SSIS中增加这一个行号列?
谢谢。
已邀请:
3

BIWORK - 热衷于微软BI技术,技术架构和解决方案! 2013-12-27 回答

刚才的是第一种方式,第二种方式也可以学习一下,就是使用 Script Task 也解决这个问题。

拖放一个 Script Task,这里要选择 Transfomation 转换,意味着在输入源和输出目的地之间进行中间转换的组件。
5.PNG


如果以后在 Script 中有比较复杂的逻辑运算需要使用到输入源的某些列的话,可以在这里选中它。
6.PNG


最重要的就是这里的输出列了,这个输出列之前并不存在,是通过 Script Task 创建出来的,后面可以使用到的。
7.PNG


点击 Script 并编辑 Edit Script
最后的一个方法是我们要使用到的,就是转换处理。在方法外面定义一个变量,表示行号从 1 开始。方法参数 Row 已经将之前在 Script Task 中引用的 InputColumn 和 创建的 OutputColumn 全部包装成了属性,直接可以通过 Input0Buffer Row 来调用。 那么每进来一行数据,这个方法就被调用一次并同时向下输出一次。也就是说进来一行,处理一行,出去一行。

int rowNumber = 1;
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
Row.RowNumber = rowNumber;
rowNumber = rowNumber + 1;
}


保存并执行包,开启一个 Data Viewer 查看一下运行时的数据,就能看到 RowNumber 已经创建好了,下游就可以向文件写入数据了。
8.PNG


具体步骤也可以看我的博客 - http://www.cnblogs.com/biwork/p/3494387.html
1

BIWORK - 热衷于微软BI技术,技术架构和解决方案! 2013-12-27 回答

直接在指定数据源的时候不要直接选择视图,而是使用 SELECT 语句代替,使用 ROW_NUMBER()创建序号。

SELECT ROW_NUMBER()OVER(ORDER BY FullName) AS ROWNO,
FullName,
Title
FROM BIWORK_SSIS.dbo.DimEmployee


1.PNG

这样就可以直接输出了。

0

天桥下的郑成功 - Hadoop大数据开发工程师、数仓架构师、熟悉数据仓库设计、Hadoop、Spark、HBase、Hive、SSIS等开发 2013-12-27 回答

我觉得你可以将这个 ROW_NUMBER() 写到你的 VIEW里面去。
因为如果你写TSQL来实现的话,你的view就没法重用了。
0

天桥下的郑成功 - Hadoop大数据开发工程师、数仓架构师、熟悉数据仓库设计、Hadoop、Spark、HBase、Hive、SSIS等开发 2013-12-27 回答

不错哦,不过这个效率咋样?
还是哥们你想通过这个例子告诉我们script也能做一些事情。

要回复问题请先登录注册