我有一个我编程的SSIS包,我的脚本组件不允许空列输入。我已经选中了该框以保持平面文件源组件中的空值。我的程序运行良好,直到我的脚本组件,我得到错误“列有一个空值”(超级模糊,我知道)。当前抛出错误的列是一个“int”值列,用于我的脚本中的聚合。
我可以将空值设为0或说“NULL”,但我更愿意将它们留空。
我正在使用SQL Server BIDS 2008。
答案 0 :(得分:8)
因为SSIS处理数据库太多并且不想花费大量时间来区分DB NULL和C#NULL,所以它们为Buffer中的每个输入列创建了具有命名约定的布尔属性(columnname)_IsNull 。您可以在MSDN上了解更多相关信息。
因此,您必须使用这些缓冲区列来确定该值是否为null,然后执行您尝试对组件中的该列执行的任何操作。
类似
if (!Row.MyColumn_IsNull) {
//do something }
else {
//do something else, or nothing, etc.
}
答案 1 :(得分:2)
虽然Kyle的答案非常充分,但我使用了一种工作得很好的不同方法。我用三元组来表示c#。
价值 = 价值 _IsNull? 真值:虚假值;
Row。 rowname = Row。 rowname _IsNull? 0:行。 rowname ;
如果我的脚本中的null为null,则会将我的null整数列的值更改为0。否则,它保留了值。
答案 2 :(得分:0)
您的错误是在C#代码中发生的吗?当你有一个数据类型为int的数据库列时,它会有点令人抓狂,它允许空值。在C#land中你必须使用int吗?当你需要接受空值时,它被认为是int。否则,提到的方法已经是一个很好的方法。