Question

Je développe un package SSIS. J'essaie d'écrire des données depuis SQL Server 2005 vers MS Access 2007.

Je ne sais pas trop comment convertir un champ SQL char (1) en un champ Accès Oui / Non.

D'après les informations que j'ai rassemblées, l'équivalent SQL d'un champ Accès Oui / Non serait un champ de bits, avec les valeurs 0 ou 1.

Le champ mon caractère SQL (1) (qui est mon champ source) contient "N". ou "Y". Je n'ai pas l'option d'utiliser un champ de bits, d'où mon dilemme. J'ai essayé d'incarner les booléens et les nombres entiers et je n'ai pas eu de succès.

Dans ma tâche de flux de données, j'ai essayé de créer des expressions régulières en vain et des colonnes dérivées, des transformations de données, etc. en vain. Je suis coincé.

J'ai vu des exemples de création d'instructions conditionnelles qui parcourent les collections .Row. Cela semble un peu exagéré de devoir écrire des conditions pour les contrôles NULL ou les valeurs de chaîne.

Dans le lien MSDN Equivalent SSIS aux propriétés de la tâche de données de transformation DTS ... il a un code similaire à celui-ci:

If DTSSource("Col010") = "Y" Then
  DTSDestination("X") =  -1
 Else
  DTSDestination("X") =  0
End If

Dois-je pouvoir manipuler les valeurs de ligne directement via le code? Puisque le champ source est de type Oui / Non, accepte-t-il des valeurs entières? valeurs négatives? Oui est en réalité " -1 " dans MS accès, et je suppose que cela me trouble.

Il semble qu'une expression régulière résoudrait ce problème, mais je ne sais pas trop comment l'utiliser.

Y a-t-il quelque chose que je néglige? Il doit y avoir un moyen de convertir & CHAR; CHAR " sur "OUI / NON".

** Je sais qu’il est facile de souligner ici que le bon vieux SQL DTS 2000 pouvait gérer cela sans problème, par défaut, directement par défaut, installé par un singe. Je me retrouve à passer trop de temps sur WAAAAY pour les toutes petites bizarreries de SSIS, comme ce problème de terrain Oui / Non.

Je ne trouve aucune documentation sur les champs Oui / Non de SSIS et MS Access. MSDN ne me permettra pas de poser une question non plus. Je sais, pauvre moi :(

Quelqu'un at-il déjà rencontré ce problème avec SSIS et MS Access?

Était-ce utile?

La solution

Voir ce sujet à propos de MSDN pour obtenir des informations sur la transformation de colonne dérivée.

Cela ne traite pas spécifiquement de ce que vous essayez de faire, mais certains exemples impliquent que vous devriez pouvoir atteindre votre objectif. Définissez le type de la colonne de sortie dérivée sur DT_BOOL et utilisez une version à une ligne du code que vous avez ci-dessus comme Expression (peut-être avec un opérateur ternaire?).

Et oui, Access Jet représente True en tant que -1. False = 0, et True n'est pas faux. Si vous appliquez un bitwise Non à 0, vous obtenez la version de complément à deux de -1.

Mise à jour: Le stockage interne Jet d'un booléen est sous la forme d'un entier (allez comprendre - mais c'est ce qu'ils ont choisi ...). En tant que tels, les champs Jet Oui / Non acceptent zéro (0) pour Faux et différent de zéro (pas seulement -1) pour Vrai. Voir les commentaires

Autres conseils

Pour résoudre ce problème, j'ai créé une colonne dérivée.

L'expression régulière de la colonne est:

[column] == "Y" ? -1 : 0

Le type de données est:

single-byte signed integer [DT_I1]

et alto! Jet (alias MS Access, merci David W. Fenton!), Affiche maintenant mes champs Oui / Non.

Après avoir constaté qu’un seul enregistrement apparaissait dans le tableau, j’ai remarqué que mes données de test étaient invalides et corrigé le problème sous-jacent.

C’est une bonne documentation sur la manière de convertir les champs SQL (1) (avec les valeurs "N" ou "Y") en MS Access (oooops, je voulais dire Jet). Les champs Oui / Non.

Merci pour l'aide de tous. Stackoverflow est inestimable.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top