如何在SSIS中的每一行中生成具有不同数据类型的固定宽度文件

Posted

技术标签:

【中文标题】如何在SSIS中的每一行中生成具有不同数据类型的固定宽度文件【英文标题】:How to generate a fixed width file with different data types in each row in SSIS 【发布时间】:2019-08-20 21:51:16 【问题描述】:

我想知道是否有更好的方法来按照我需要的方式呈现数据,使用 T-SQL 并从 SQL 命令(执行存储过程)在 SSIS 中生成 TEXT 文件。

所以我需要在文本文件中呈现每列具有固定宽度的数据,例如 col1 - 10 个字母字符、带有零填充的 col2 数字、col3 空白等。 一行中的总字符数不能超过且必须为 275。

但是,每一行都会有不同的数据和不同的列要求。 所以如果

第一行:'1',col1 - 22 个字母字符,col2 数字,零填充 10 个字符,col3 空白(最多填充 275 个) 第二行:'2',col1 - 日期 6 个字符,col2 3 个空格 col3 30 个字母字符,col4 数字,col 5 个空格(最多填写 275 个)

我想出的是将行连接成 1 个大字符串,然后合并所有行。

在 SSIS 中,我在没有列标题的情况下做 Ragged,文本文件完全按照我的意愿出现,但我想知道是否有更好的方法来做到这一点

我想出了如何使用不同的函数来操作数据,所以我将只提供一个没有它们的代码以使一切变得简单

SELECT CONCAT('1',COL1, COL2, REPLICATE(' ',n...)) as 123
FROM MYTABLE

UNION ALL

SELECT CONCAT('2',COL1,REPLICATE(' ',3),COL2, COL3, REPLICATE (' ',n..)) as 123
FROM MYTABLE2

结果的布局应该像文本文件中的那样(我只是为这个例子放了随机数据以使可视化更好)

1Microsoft SQL Server  0000002017
208202019   John Doe                      00000015
208202019   Jane Doe                      00000109
208202019   Will Smith                    00001996

【问题讨论】:

【参考方案1】:

重新表述您的任务 - 您需要为平面文件设置自定义标题,并以 Ragged 格式输出母猪。 替代方法如下。创建一个字符串变量并根据需要用标题行数据填充它。在填写平面文件目标数据流任务上,找到[Flat File Destination].[Header]属性并将其表达式设置为上面的字符串变量。这将创建一个具有已定义标题的文件。然后在数据流本身上 - 创建一个字符串计算列,在其中格式化输出字符串,然后 - 将此列保存到 Flat File Destination。 这是更多的 SSIS 方法,因为您不必执行复杂的 SQL 语句。

【讨论】:

以上是关于如何在SSIS中的每一行中生成具有不同数据类型的固定宽度文件的主要内容,如果未能解决你的问题,请参考以下文章

如何将 DT_R8 存储在 SSIS 中的变量中

如何在 Django 模板中生成换行符

如何在 SQL Server 中生成日期范围

在控制器中生成有效的hdiv url

如何在oracle中获取具有不同名称的每一行的序列?

如何在调试过程中强制 SSIS 数据流出错或停止?