Je viens de le faire la semaine dernière. J'ai écrit une fonction qui fait cela pour chaque champ que j'appelle la fonction.
est ici la fonction
/*
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
Voici la requête qui appelle la fonction et fournit la sortie largeur fixe:
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
*/
Cast chaque champ individuellement varchar de taille requise? –
Devrais-je faire "Largeur fixe avec des délimiteurs de ligne" ou "Ragged droite?" –
Ragged right est pour quand vous avez un nombre variable de colonnes sur chaque ligne. Quelle configuration de sortie exacte avez-vous utilisée dans votre fichier? Comme déjà mentionné, assurez-vous que vous n'êtes pas dans un éditeur de texte qui s'enroule automatiquement - les données peuvent toutes être sur une seule ligne. Oui SSIS peut être une douleur. Ce n'est pas tout ce qui est craqué pour être. Vous pourriez trouver que vous avez besoin de l'exporter comme une ligne pré formatée comme suggéré ci-dessous –