我其實剛剛在上週做了這個。我寫了一個函數,然後爲我稱之爲函數的每個字段執行此操作。
下面是函數
/*
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
*/
角色的每個字段以所需尺寸的VARCHAR? – 2013-03-11 19:10:36
我應該做「固定寬度的行分隔符」或「衣衫襤褸嗎?」 – 2013-03-11 19:11:50
當每行有不定數量的列時,右邊是不規則的。你在文件中使用了什麼確切的輸出配置?如前所述,確保您不在自動換行的文本編輯器中 - 數據可能全部位於同一行。 是的SSIS可以是一個痛苦。這並不是所有的事情都被破解了。您可能會發現需要將其導出爲一個預先格式化的行,如下所示 – 2013-03-12 01:35:13