如何在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中的每一行中生成具有不同数据类型的固定宽度文件的主要内容,如果未能解决你的问题,请参考以下文章