2013-06-25 16 views
5

Ho un pacchetto SSIS che sto programmando e il mio componente script non consentirà input di colonne Null. Ho controllato la casella per mantenere i null nel componente di origine file flat. Il mio programma funziona bene fino a quando il mio componente di script non riceve l'errore "La colonna ha un valore nullo" (super vago, lo so). La colonna che genera attualmente l'errore è una colonna con valore "int" e viene utilizzata per le aggregazioni nel mio script.Componente Script SSIS, Consenti valori Null

Potrei fare i valori nulli 0s o dire "NULL" ma preferirei lasciarli in bianco.

Sto usando BIDS SQL Server 2008.

+0

Invia un numero sufficiente del codice del componente in modo che possiamo indovinare. –

+0

A differenza dei siti di forum, non utilizziamo "Grazie" o "Qualsiasi aiuto apprezzato" o firme su [so]. Vedi "[Se 'Hi', 'thanks', tagline e saluti saranno rimossi dai post?] (Http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be -removed-from-posts) –

risposta

7

Quindi, a causa offerte SSIS con i database così tanto e non vuole spendere un sacco di tempo differenziazione tra DB NULL e C# NULL, creano le proprietà booleane per ogni colonna di input nel buffer con la convenzione di denominazione (columnname) _IsNull. Puoi leggere ulteriori informazioni al riguardo su MSDN.

Quindi è necessario utilizzare quelle colonne del buffer per determinare se il valore è nullo e quindi fare qualsiasi cosa si stia tentando di fare con quella colonna nel componente.

Quindi qualcosa di simile

if (!Row.MyColumn_IsNull) { 
//do something } 
else { 
//do something else, or nothing, etc. 
} 
+0

Grazie, Kyle! Era quello che cercavo di fare originariamente e non riuscivo a catturare l'input prima che l'errore venisse lanciato. Ho finito per usare l'operazione ternaria che sto per mettere Come altra risposta qui. – user2471943

2

Mentre la risposta di Kyle è molto sufficiente, ho usato un metodo diverso che sta lavorando bene. Ho usato il ternario per C#.

Valore = Valore _IsNull? True Value: False Value;

Fila. rowname = Riga. rowname _IsNull? 0: Row. rowname;

Questo ha modificato il valore delle mie colonne in numero intero nullo su 0 se erano nulle in arrivo nel mio script. Altrimenti, ha mantenuto il valore.

+0

Lo accetterei come la soluzione Ho avuto lo stesso problema – SamekaTV

+0

Vorrei sconsigliarlo a meno che non ne abbia una ragione particolare: 0 è di solito un significato molto diverso da null – Scotch

0

Il tuo errore si verifica nel codice C# da qualche parte? A volte è un po 'esasperante quando si ha una colonna del database con il tipo di dati int e consente i valori nulli. In C# land devi usare l'int? come applicato a int quando è necessario accettare valori nulli. Altrimenti gli approcci citati sono già una buona strada da percorrere.

+0

Sì, questo è anche un'altra opzione che ho provato. Grazie! – user2471943

Problemi correlati