2013-03-11 85 views
1

我是唯一一个认为SSIS是一块*如何将数据从查询导出为固定列宽的文本文件?

我有一个查询:

SELECT * FROM Table1 

我想要做的就是把这个与目标文件(我有从客户端规格)的特定长度的文本文件。

例如,字段1的大小为20,字段2的大小为3,依此类推。

我也有场位置,字段1:1-20,字段2:21-23等

我创建具有源作为SQL查询和平面文件作为一个SSIS包目的地。我无法为我的生活得到这个工作。

文本文件中的数据全部搞乱了(它遍布整个地方,没有列)。

这是世界上最简单的任务,我做不到。我不知道这是我还是SSIS只是一个废话。

+0

角色的每个字段以所需尺寸的VARCHAR? – 2013-03-11 19:10:36

+0

我应该做“固定宽度的行分隔符”或“衣衫褴褛吗?” – 2013-03-11 19:11:50

+0

当每行有不定数量的列时,右边是不规则的。你在文件中使用了什么确切的输出配置?如前所述,确保您不在自动换行的文本编辑器中 - 数据可能全部位于同一行。 是的SSIS可以是一个痛苦。这并不是所有的事情都被破解了。您可能会发现需要将其导出为一个预先格式化的行,如下所示 – 2013-03-12 01:35:13

回答

1

转到您为平面文件定义的连接管理器。在左侧框中,选择常规并将格式设置为“固定宽度”。然后在左边的框中选择高级,在这里您可以为每个字段设置OutputColumnWidth。最后,在左边的框中,选择Preview以在执行SSIS包之前验证结果。

希望这会有所帮助。 Kosh

+0

值分散在整个txt文件中。我认为这是因为它没有在最后一栏之后插入新的一行。另外,我将格式设置为“固定宽度” – 2013-03-11 20:17:14

+1

您是否在NotePad中查看输出文件?我有一个文本文件,使值出现在记事本中(即使未选中Word Wrap时)。但是,当我在Excel中打开它时,所有内容都已到位并且看起来正确。 – 2013-03-11 21:12:49

0

我其实刚刚在上周做了这个。我写了一个函数,然后为我称之为函数的每个字段执行此操作。

下面是函数

/* 
USE [Newton-Dev] 
GO 
/****** Object: UserDefinedFunction [dbo].[CharPad] Script Date: 1/10/2015 11:38:27 AM ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
/* 
Script : Character Padding Function; Assist with fixed width file creation 
Version : 1.0 (01/08/2015) 
Author : Jeffery Williams 

*/ 
ALTER FUNCTION [dbo].[CharPad] (
    @Input VARCHAR(255) 
    ,@OutputWidth INT 
    ,@OutputAlign VARCHAR(5) 
    ,@PadCharacter CHAR(1)) 
RETURNS VARCHAR(255) 
AS 
BEGIN 
DECLARE @Output VARCHAR(255) 
DECLARE @InputWidth INT 

SET @InputWidth = LEN(@Input) 

IF @InputWidth > @OutputWidth 
    BEGIN 
     IF @OutputAlign = 'LEFT' 
      BEGIN 
      SET @Output = LEFT(@Input,@OutputWidth) 
      END 
     IF @OutputAlign = 'RIGHT' 
      BEGIN 
      SET @Output = RIGHT(@Input,@OutputWidth) 
      END 
    END 

IF @InputWidth < @OutputWidth 
    BEGIN 
     IF @OutputAlign = 'RIGHT' 
      BEGIN 
      SET @Output = REPLICATE(@PadCharacter, @OutputWidth - @InputWidth) + @Input 
      END 
     IF @OutputAlign = 'LEFT' 
      BEGIN 
      SET @Output [email protected]+ REPLICATE(@PadCharacter, @OutputWidth - @InputWidth) 
      END 
    END 

IF @InputWidth = @OutputWidth 
    SET @Output = @Input 

RETURN (@Output) 
END 

这里是调用该函数,并提供固定宽度输出的查询:单独

SELECT --dbo.CharPad (DeltaLineId,8,'LEFT',' '), dbo.CharPad (DeltaElgId,8,'LEFT',' ') 
     dbo.CharPad (CARRIER_ID,6,'LEFT',' ') 
     ,dbo.CharPad (GROUP_NUM,7,'RIGHT','0') 
     ,dbo.CharPad (LEFT('0000' + SUB_GROUP_ID, 4),9,'LEFT',' ') 
     ,dbo.CharPad (SVC_TYPE,1,'LEFT',' ') 
     ,dbo.CharPad (FILLER_1,1,'LEFT',' ') 
     ,dbo.CharPad (FILLER_2,5,'LEFT',' ') 
     ,dbo.CharPad (RATE_CODE,2,'LEFT',' ') 
     ,dbo.CharPad (FILLER_3,1,'LEFT',' ') 
     ,dbo.CharPad (ELIG_CODE,1,'LEFT',' ') 
     ,dbo.CharPad (EFF_DATE,8,'LEFT',' ') 
     ,dbo.CharPad (TERM_DATE,8,'LEFT',' ') 
     ,dbo.CharPad (SUBSC_SSN,9,'LEFT',' ') 
     ,dbo.CharPad (INDIV_SSN,9,'LEFT',' ') 
     ,dbo.CharPad (CHNG_SSN,9,'LEFT',' ') 
     ,dbo.CharPad (REL_CODE,2,'LEFT',' ') 
     ,dbo.CharPad (HIRE_DATE,8,'LEFT',' ') 
     ,dbo.CharPad (DOB,8,'LEFT',' ') 
     ,dbo.CharPad (REL_TYPE,1,'LEFT',' ') 
     ,dbo.CharPad (FIRST_NAME,24,'LEFT',' ') 
     ,dbo.CharPad (MID_NAME,24,'LEFT',' ')     
     ,dbo.CharPad (LAST_NAME,24,'LEFT',' ') 
     ,dbo.CharPad (GENDER,1,'LEFT',' ') 
     ,dbo.CharPad (POP_DESC,5,'LEFT',' ') 
     ,dbo.CharPad (ADR_LINE_1,30,'LEFT',' ')      
     ,dbo.CharPad (ADR_LINE_2,30,'LEFT',' ') 
     ,dbo.CharPad (CITY,30,'LEFT',' ')       
     ,dbo.CharPad ([STATE],2,'LEFT',' ') 
     ,dbo.CharPad (COUNTY_CODE,3,'LEFT',' ') 
     ,dbo.CharPad (COUNTRY_CODE,3,'LEFT',' ') 
     ,dbo.CharPad (ZIP,5,'LEFT',' ')  
     ,dbo.CharPad (ZIP_EXT,4,'LEFT',' ') 
     ,dbo.CharPad (FILLER_4,21,'LEFT',' ')    
     ,dbo.CharPad (USER_DEFINED,30,'LEFT',' ') 
     ,dbo.CharPad (WAIT_PERIOD,1,'LEFT',' ') 
     ,dbo.CharPad (CAID,9,'RIGHT','0') 
     ,dbo.CharPad (FILLER_5,9,'LEFT',' ') 
FROM export.DeltaLine 

*/ 
+0

这似乎是我需要的报告的详细信息部分。谢谢,不过你知道我怎样才能得到一个头文件(行)在同一个文件中有不同的开始和结束位置,仍然需要某些项目是左对齐和右对齐?我想我可能不得不创建两个文件,然后手动添加标题记录。任何想法如何从一开始就将所有内容组合成一个文件将不胜感激。 – 2018-02-07 18:27:05

相关问题