2013-06-25 8 views
5

Ich habe ein SSIS-Paket, das ich programmiere, und meine Skriptkomponente lässt keine Spalteneingaben zu. Ich habe das Kästchen angeklickt, um Nullen in der Quellkomponente der flachen Datei zu behalten. Mein Programm läuft gut bis zu meiner Skriptkomponente, wo ich den Fehler "Die Spalte hat einen Nullwert" (super vage, ich weiß) bekomme. Die Spalte, die derzeit den Fehler auslöst, ist eine "int" -wertige Spalte und wird für Aggregationen in meinem Skript verwendet.SSIS-Skriptkomponente, Nullwerte zulassen

Ich könnte die Nullwerte 0s machen oder "NULL" sagen, aber ich würde es vorziehen, sie leer zu lassen.

Ich bin mit SQL Server BIDS 2008

+0

Bitte posten Sie genug Code Ihrer Komponente, damit wir raten können. –

+0

Im Gegensatz zu Forenseiten verwenden wir nicht "Danke" oder "Jede Hilfe geschätzt" oder Unterschriften auf [so]. Siehe "[Sollen 'Hallo', 'Danke', 'Slogans' und 'Anrede' aus Posts entfernt werden?] (Http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be -removed-from-posts) –

Antwort

7

So weil SSIS beschäftigt sich mit den Datenbanken so viel und nicht viel Zeit Unterscheidung zwischen DB NULL und C# NULL ausgeben will, sie schaffen boolean Eigenschaften für jede Eingabespalte im Puffer mit der Namenskonvention (Spaltenname) _IsNull. Sie können mehr darüber auf MSDN lesen.

Sie müssen also diese Pufferspalten verwenden, um zu ermitteln, ob der Wert null ist, und dann alles zu tun, was Sie mit dieser Spalte in der Komponente zu tun versuchen.

So etwas wie

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

Danke, Kyle! Das war, was ich ursprünglich versucht habe zu tun, und konnte die Eingabe nicht fangen, bevor der Fehler ausgelöst wurde. Ich benutzte schließlich die ternäre Operation, die ich setzen werde als eine andere Antwort hier – user2471943

2

Während Kyle Antwort sehr ausreichend ist, habe ich eine andere Methode, die ganz gut funktioniert. Ich benutzte das Ternär für C#.

Wert = Wert _IsNull? Wahrer Wert: Falscher Wert;

Reihe. rowname = Zeile. rowname _IsNull? 0: Reihe. rowname;

Dies änderte den Wert meiner Null-Integer-Spalten auf 0, wenn sie Null in mein Skript kommen. Ansonsten behielt es den Wert bei.

+0

Ich würde dies als die Lösung akzeptieren. Ich hatte das gleiche Problem. – SamekaTV

+0

Ich würde davon abraten, es sei denn, Sie haben einen bestimmten Grund dafür. 0 ist in der Regel eine ganz andere Bedeutung als null. – Scotch

0

Tritt Ihr Fehler irgendwo im C# -Code auf? Es wird manchmal etwas verrückt, wenn Sie eine Datenbankspalte mit dem Datentyp int haben und Nullen zulassen. In C# land musst du den int benutzen? wie int, wenn Sie Nullen akzeptieren müssen. Ansonsten sind die bereits erwähnten Ansätze ein guter Weg.

+0

Ja, das ist auch eine andere Möglichkeit, die ich ausprobiert habe. – user2471943