SSIS 包只是从 txt 文件导入到 sql 数据库。当我们制作包时使用旧文件并且执行良好。旧的源文件得到(10 列)新的源文件得到 15 列。当源文件更改失败时。[平面文件源 [1]] 错误:数据转换失败。列“第 10 列”的数据转换返回状态值 4 和状态文本“文本被截断或目标代码页中的一个或多个字符不匹配。”。列的变化产生了一个问题,如何以更好的方式解决这个问题?如果新旧格式文件都需要用同一个包处理。
谢谢
SSIS 包只是从 txt 文件导入到 sql 数据库。当我们制作包时使用旧文件并且执行良好。旧的源文件得到(10 列)新的源文件得到 15 列。当源文件更改失败时。[平面文件源 [1]] 错误:数据转换失败。列“第 10 列”的数据转换返回状态值 4 和状态文本“文本被截断或目标代码页中的一个或多个字符不匹配。”。列的变化产生了一个问题,如何以更好的方式解决这个问题?如果新旧格式文件都需要用同一个包处理。
谢谢
如果我正确理解您的问题,您有一个文件(我假设文件名相同)具有旧文件格式或新文件格式并且由于您的平面文件源仅具有旧(10 列)数据文件架构而失败?如果是这种情况,我将创建一个布尔变量并将其命名为 isOldFormat 之类的名称。然后,我将在您的控制流中使用脚本任务来确定它是否有 10 列或 15 列。伪代码将是这样的:
1)打开平面文件 2)根据您的分隔符计算列数 3)条件声明:
If columns.Count = 10 isOldFormat = True Else If columns.Count = 15 isOldFormat = False Else 抛出错误
然后我将创建另一个具有新文件格式架构的数据流(现在基本上你有两个数据流——一个使用旧文件格式,一个使用新文件格式)。
在这一步之后,您可以将脚本任务中的优先约束拖到新创建的数据流中,并将一个拖到旧数据流中。通过双击您的优先约束,您可以将求值器操作属性设置为表达式,并在表达式框中键入 @isOldFormat == true 用于约束去往包含旧平面文件源和 @isOldFormat == false 的数据流对于其他数据流。这将仅根据脚本任务中设置的变量执行一个或另一个数据流。
希望这可以帮助。