当行的管道数多于列数时,SSIS 管道分隔文件不会失败?
SSIS Pipe delimited file not failing when the row has more number pipes than the column number?
我的源文件是 (|
) 管道分隔文本文件 (.txt)。我正在尝试使用 SSIS(SQL Server Data Tools 2012)将文件加载到 SQL Server 2012。我有三列。下面是文件中数据的外观示例。
我希望我的包应该失败,因为这是管道 (|
) 分隔而不是我的包是成功的,第三列的最后一行有多个管道到最后一列。
我的问题是为什么包没有失败?我相信它有损坏的数据,因为如果我们使用定界符它有更多的列?
如果我想让包失败,我有什么选择,如果分隔符的数量多于列数?
您可以编写一个脚本任务来读取文件、计算管道数量,如果管道数量不是您想要的,则会引发错误。
如果您查看平面文件连接管理器的高级页面,您就会知道发生了什么。对于除最后一个字段之外的所有字段,分隔符都是“|”,对于最后一个字段,它是 CRLF。
因此,根据设计,最后定义的管道和行尾 (CRLF) 之后的所有数据都将导入到您的最后一个字段中。
我要做的是将另一列添加到连接管理器和您的分段 table。在目标中映射新的 'TestColumn'。导入完成后,您要确保该列在每一行中都为空。如果没有则抛出错误。
您可以使用脚本任务,但这样您就不需要用 c# 编写代码,也不必处理文件两次。如果您喜欢table编写脚本任务和/或您不能使用带有额外列的暂存table,那么这将是我能想到的唯一其他途径。
检查空值的建议是使用执行 sql 任务并将单行结果设置为整数。如果该值 > 0,则包失败。
查询将是 Select Count(*) NotNullCount From Table Where TestColumn Is Not Null.
我的源文件是 (|
) 管道分隔文本文件 (.txt)。我正在尝试使用 SSIS(SQL Server Data Tools 2012)将文件加载到 SQL Server 2012。我有三列。下面是文件中数据的外观示例。
我希望我的包应该失败,因为这是管道 (|
) 分隔而不是我的包是成功的,第三列的最后一行有多个管道到最后一列。
我的问题是为什么包没有失败?我相信它有损坏的数据,因为如果我们使用定界符它有更多的列? 如果我想让包失败,我有什么选择,如果分隔符的数量多于列数?
您可以编写一个脚本任务来读取文件、计算管道数量,如果管道数量不是您想要的,则会引发错误。
如果您查看平面文件连接管理器的高级页面,您就会知道发生了什么。对于除最后一个字段之外的所有字段,分隔符都是“|”,对于最后一个字段,它是 CRLF。
因此,根据设计,最后定义的管道和行尾 (CRLF) 之后的所有数据都将导入到您的最后一个字段中。
我要做的是将另一列添加到连接管理器和您的分段 table。在目标中映射新的 'TestColumn'。导入完成后,您要确保该列在每一行中都为空。如果没有则抛出错误。
您可以使用脚本任务,但这样您就不需要用 c# 编写代码,也不必处理文件两次。如果您喜欢table编写脚本任务和/或您不能使用带有额外列的暂存table,那么这将是我能想到的唯一其他途径。
检查空值的建议是使用执行 sql 任务并将单行结果设置为整数。如果该值 > 0,则包失败。
查询将是 Select Count(*) NotNullCount From Table Where TestColumn Is Not Null.