Domanda

Ho un pacchetto SSIS che sto sviluppando. Sto tentando di scrivere dati da SQL Server 2005 a MS Access 2007.

Sono piuttosto sconcertato su come convertire un campo char (1) SQL in un campo Access Sì / No.

Dalle informazioni che ho raccolto, l'equivalente SQL di un campo Accesso Sì / No sarebbe un campo bit, con valori di 0 o 1.

Il mio campo Char (1) SQL (che è il mio campo di origine), contiene " N " o "Y". Non ho la possibilità di usare un po 'di campo, quindi il mio dilemma. Ho provato a trasmettere booleani e numeri interi e non ho avuto alcun successo.

Nella mia attività Flusso di dati, ho cercato di creare espressioni regolari senza risultati e ho ricavato colonne, trasformazioni di dati, ecc. senza risultati. Sono bloccato.

Ho visto alcuni esempi sulla creazione di istruzioni condizionali che passano attraverso le raccolte .Row. Sembra un po 'esagerato dover scrivere le condizioni per i controlli NULL o i valori di stringa.

Nel collegamento MSDN SSIS equivalente alle proprietà dell'attività Trasforma dati DTS ... ha del codice in qualche modo simile a questo:

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

Dovrei essere in grado di manipolare i valori delle righe direttamente, tramite il codice? Poiché il campo di origine è di tipo Sì / No, accetta valori interi? valori negativi? Sì è in realtà " -1 " nell'accesso alla SM, e immagino che questo mi stia confondendo.

Sembra che un'espressione regolare risolva questo problema, ma non sono sicuro di come usarlo anche.

C'è qualcosa che sto trascurando? Deve esserci un modo per convertire " CHAR " a "SÌ / NO".

** So che è facile sottolineare qui che un buon vecchio DTS SQL del 2000 potrebbe gestirlo senza alcun problema, per impostazione predefinita, pronto all'uso, installato da una scimmia. Mi ritrovo a passare WAAAAY troppo tempo sulle strane stranezze di SSIS, come questo problema sul campo Sì / No.

Non riesco a trovare alcuna documentazione sull'argomento dei campi Sì / No di SSIS e MS Access. MSDN non mi permetterà nemmeno di pubblicare una domanda. Lo so, povero me :(

Qualcuno ha mai incontrato questa stranezza con SSIS e MS Access?

È stato utile?

Soluzione

Vedi questo argomento su MSDN per informazioni sulla trasformazione Colonna derivata.

Non si occupa specificamente di ciò che stai cercando di fare, ma alcuni degli esempi implicano che dovresti essere in grado di raggiungere il tuo obiettivo. Imposta il tipo della colonna di output derivata su DT_BOOL e usa una versione di una riga del codice che hai sopra come espressione (forse con un operatore ternario?).

E sì, Accesso Jet rappresenta True come -1. False = 0 e True non è falso. Se si applica un bit per bit a 0, si ottiene la versione a complemento a due di -1.

Aggiornamento: la memoria interna Jet di un booleano è come numero intero (vai alla figura - ma è quello che hanno scelto ...). Pertanto, i campi Jet Sì / No accettano zero (0) per Falso e non zero (non solo -1) per Vero. Vedi commenti

Altri suggerimenti

Per risolvere questo problema, ho creato una colonna derivata.

L'espressione regolare per la colonna è:

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

Il tipo di dati è:

single-byte signed integer [DT_I1]

e viola! Jet (alias MS Access, grazie David W. Fenton!), Ora visualizza i miei campi Sì / No.

Dopo aver notato che nella tabella era presente solo un record, ho notato che i miei dati di test non erano validi e ho corretto il problema sottostante.

Questa è una buona documentazione su come lanciare i campi SQL char (1) (con i valori "quot" N "o" quot "Y) su MS Access (oooops, intendevo Jet) Sì / No campi.

Grazie per l'aiuto di tutti. Stackoverflow è inestimabile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top