SSIS évite de modifier manuellement l'expression de colonne dérivée

J'ai un package SSIS qui doit être exécuté tous les premiers jours de la semaine, la source provient du file excel et la destination est la table SQL.

Le process actuel consiste à replace manuellement la valeur nulle par 0 du file excel (cela prend beaucoup de time), donc j'ai créé un package et je travaille actuellement avec l'expression de colonne dérivée "(Column1 ==" "? 0: Colonne 1) ", mais les colonnes des files Excel ne sont pas toujours identiques à l'expression de la colonne dérivée, donc chaque fois que je dois exécuter le package, je dois également modifier l'expression de la colonne dérivée. Je cherche une meilleure façon de le faire, et d'éviter de le faire manuellement. Merci d'avance.

Il n'y a pas de manière embeddede facile de gérer les noms de colonnes dynamics dans SSIS, et encore less de s'inquiéter de l'expression dans une transformation de colonne dérivée.

Utilisez BiML pour créer dynamicment des packages SSIS qui importeront le file en fonction de ses noms de colonnes actuels.

Google BiML Tutorial pour commencer à apprendre BiML, et bonne chance.

S'il n'est pas possible d'avoir la personne qui crée le file Excel chaque semaine pour les nommer les cinq colonnes «Lundi», «Mardi», «Mercredi», «Jeudi» et «Vendredi», au lieu de «20151005», "20151006", "20151007", "20151008" et "20151009" (par exemple, ce qui a été appliqué pour la semaine dernière), cela peut se faire avec les étapes suivantes.

Pas:

  1. Créez une nouvelle variable user globale de type string dans votre package SSIS et appelez-en quelque chose comme "Jour".
  2. Dans votre expression de colonne dérivée, replace "20151005" par exemple par la nouvelle variable user. Vous pouvez le faire glisser vers le bas en haut et ressembler à quelque chose comme @ [user :: Day].
  3. Maintenant, pour remplir dynamicment cette nouvelle variable «Jour», ajoutez un script SQL qui exécute le SQL suivant avec un ResultSet d'une seule ligne. Pour l'set de résultats dans la gauche, ajoutez votre variable user "Jour" sous la colonne Nom de la variable. Donnez au Nom du résultat une valeur de "0". Sous Général, définissez le type de source à l'input directe et fournissez le SQL suivant qui renverra la valeur de la date du lundi de la semaine précédente au format yyyymmdd.

     declare @date as datetime set @date = dateadd(week, datediff(week, 0, getdate()-7), 0) select cast(year(@date) as char(4)) + right('00' + convert(varchar(2), month(@date)), 2) + right('00' + convert(varchar(2), day(@date)), 2) 

La key ici est que vous pouvez exécuter le package SSIS n'importe quel jour de la semaine suivante et qu'il capture cette information pour le lundi de la semaine précédente. Mais si vous passez une semaine, il searchra une colonne qui n'existe plus. L'alternative à l'application d'un script SQL pour capturer la date de la semaine précédente pour lundi est de lire directement la première colonne de la feuille de calcul et cela devient complexe, car il implique l'utilisation d'une tâche de script à l'aide de Visual Basic ou C # à la place … nécessitant Références Excel. Beaucoup plus impliqué, mais peut être fait.

J'espère que cela t'aides.