2013-01-14 46 views
0

我有一个关于SSIS的快速问题。我正在开发一个包,该包执行从Excel源数据流任务到OLE DB连接。数据库中的列应该允许空值。但是,如果我在Excel电子表格的数字列中输入了错误的数据,则不会导致数据流任务失败,因为我希望这样做。我试图通过显式地尝试转换派生列步骤中的任何数字列来解决此问题,但是也会发生同样的情况 - 如果我在进入Excel数值列时输入abc,如果在程序包运行后在数据库中只显示为NULL。我希望允许NULLS,但是如果数据损坏,我希望程序包失败。Excel数据源中的错误数据在SSIS中不会生成错误

任何意见,将不胜感激:)

回答

0

我刚刚试过这个,忽略/重定向/失败设置似乎没有任何效果,NULL无论如何都更新到数据库中。

如果你不想要NULL,我建议你修改你的目的表的定义,在你希望为数字的列上指定一个NOT NULL约束。这样数据库更新和软件包将失败。

但是既然你想要空列,我可以建议的唯一的事情就是你写了一个脚本任务或脚本组件来读取和验证数据,然后再接受它。

或者,将Excel文件读入临时区域,其中所有列都是VARCHAR,然后通过SQL进行验证

0

如果编辑在其中定义导入您的SSIS任务,您可以选择的错误处理,每一列。在那里,你可以选择将其设置为失败而停止,忽略并继续等

这个链接应该帮助你处理一下你的需求:

http://sqlblog.com/blogs/rushabh_mehta/archive/2008/04/24/gracefully-handing-task-error-in-ssis-package.aspx

http://sqlserver360.blogspot.de/2011/03/error-handling-in-ssis.html

http://msdn.microsoft.com/en-us/library/ms141679.aspx