2013-03-11 3 views
1

Suis-je la seule personne qui pense que SSIS est un morceau de *?Comment exporter des données d'une requête vers un fichier texte avec des largeurs de colonnes fixes?

J'ai une requête:

SELECT * FROM Table1 

Et je veux faire est de mettre cela dans un fichier texte avec des longueurs spécifiques dans le fichier de destination (je les spécifications d'un client). Par exemple, Taille du champ 1: 20, taille du champ 2: 3, etc.

J'ai également les positions sur le terrain, le terrain 1: 1-20, sur le terrain 2: 21-23, etc.

j'ai créé un package SSIS qui a une source comme une requête SQL et un fichier plat comme destination. Je ne peux pas pour la vie de moi obtenir ce pour travailler.

Les données sur le fichier texte est tout foiré (il est dispersé partout, pas de colonnes).

C'est la tâche la plus simple au monde et je ne peux pas le faire. Je ne sais pas si c'est moi ou si SSIS est juste une merde.

+0

Cast chaque champ individuellement varchar de taille requise? –

+0

Devrais-je faire "Largeur fixe avec des délimiteurs de ligne" ou "Ragged droite?" –

+0

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 –

Répondre

1

Accédez au Gestionnaire de connexions que vous avez défini pour votre fichier plat. Dans la zone de gauche, sélectionnez Général et définissez le Format sur "Largeur fixe". Ensuite, dans la zone de gauche, sélectionnez Avancé et ici vous pouvez définir OutputColumnWidth pour chaque champ. Enfin, dans la zone de gauche, sélectionnez Aperçu pour vérifier les résultats avant d'exécuter le package SSIS.

Espérons que cela aide. Kosh

+0

les valeurs sont dispersées dans le fichier txt. Je pense que c'est parce qu'il ne met pas une nouvelle ligne après la dernière colonne. aussi, j'ai le format défini sur "largeur fixe" –

+1

Regardez-vous le fichier de sortie dans le bloc-notes? J'ai un fichier texte qui fait que les valeurs apparaissent enveloppées dans NotePad (même lorsque Word Wrap n'est pas cochée). Mais quand je l'ouvre dans Excel, tout se met en place et semble correct. –

0

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 

*/ 
+0

Cela semble être ce dont j'ai besoin pour la section des détails de mon rapport. Merci, cependant, savez-vous comment je peux obtenir un enregistrement d'en-tête (ligne) dans le même fichier qui a des positions de début et de fin différentes et qui nécessite encore que certains éléments soient justifiés à gauche et à droite? Je pensais que je pourrais avoir à créer deux fichiers, puis ajouter manuellement l'enregistrement en-tête. Toutes les idées sur la façon de combiner tout en un seul fichier depuis le début seraient appréciées. –

Questions connexes