2013-03-11 82 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

相關問題