2010-05-15 10 views
0

J'ai un enregistrement de produit qui a plusieurs prix «zonés», un pour chaque magasin qui vend le produit.SSIS comment diviser un seul enregistrement en deux enregistrements différents?

ProductID int 
Name  string 
PriceA money 
PriceB money 
PriceC money 

Dans SQL Server Integration Services, je dois partager ce pour plusieurs enregistrements:

ProductID int 
Version string // A, B, or C 
Price  money // PriceA if A, PriceB if B, etc. 

Ce serait dans un Data Flow, je présume, comme la transformation entre la source Excel et la destination OLE DB . (En supposant que OLE DB est une bonne destination pour le serveur MS SQL).

Répondre

2

Utilisez une source Excel, utilisez une multidiffusion pour diviser en un flux pour chacune de vos valeurs (par exemple, PriceA, PriceB, PriceC). Dans les flux de données divisés, utilisez une colonne dérivée pour créer votre valeur de version comme type de chaîne avec la valeur "A" dans le premier flux de données, etc. Utilisez une union pour combiner à nouveau les flux de données dans un flux de données et mapper PriceA du premier flux vers un sortie appelée Prix, carte PriceB du second flux à Price, et carte PriceC du troisième flux à Price. Vous avez maintenant un flux de données avec trois fois plus d'enregistrements que vous avez commencé.

0

Si vous définissez le « SynchronousInputID » None sous la sortie, puis appelez la AddRow() pour chaque sortie d'enregistrement:

With Output0Buffer 
    .AddRow() 
    .fieldname = "some value" 
End Width 
With Output0Buffer 
    .AddRow() 
    .fieldname = "some value" 
End Width 

mais je ne sais toujours pas comment définir une valeur null. Null ne fonctionne pas et System.DBNull est un type, pas une valeur.

2

Les deux autres suggestions sont correctes et fonctionneront, mais il existe déjà une tâche intégrée de flux de données qui peut effectuer ce type d'opération sans avoir besoin de gérer manuellement la tâche multi-cast/union ou une tâche de script. Il peut également être plus facile à maintenir. Cette opération est généralement appelée unpivot, car un pivot transforme des rangées en colonnes et transforme les colonnes en rangées. Les transformations pivot et unpivot sont disponibles dans la boîte à outils SSIS.

Questions connexes