Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
若用户尝试在管道分隔平面文件配置中导入逗号分隔的文件,则SSIS中的作业应失败_Ssis - Fatal编程技术网

若用户尝试在管道分隔平面文件配置中导入逗号分隔的文件,则SSIS中的作业应失败

若用户尝试在管道分隔平面文件配置中导入逗号分隔的文件,则SSIS中的作业应失败,ssis,Ssis,我创建了SSIS包以将管道分隔的平面文件数据加载到Sql server目标表中。为此,我使用了数据流任务、平面文件源和ole db目标。我已将平面文件连接管理器配置为管道分隔符作为列分隔符,行分隔符作为CRLF。在这种情况下,for me包成功地将管道分隔的平面文件数据导入到SQL server目标表中。现在的问题是,如果用户尝试导入逗号分隔的文件,我们是否有任何选项使作业失败?。当我尝试导入逗号分隔的文件时,作业并没有失败,并且并没有记录移动到目标表 在运行数据流之前,您可以使用一个简单的脚本

我创建了SSIS包以将管道分隔的平面文件数据加载到Sql server目标表中。为此,我使用了数据流任务、平面文件源和ole db目标。我已将平面文件连接管理器配置为管道分隔符作为列分隔符,行分隔符作为CRLF。在这种情况下,for me包成功地将管道分隔的平面文件数据导入到SQL server目标表中。现在的问题是,如果用户尝试导入逗号分隔的文件,我们是否有任何选项使作业失败?。当我尝试导入逗号分隔的文件时,作业并没有失败,并且并没有记录移动到目标表

在运行数据流之前,您可以使用一个简单的脚本任务验证文件,假设您的行上有5个管道,那么:

    Dim x As New System.IO.StreamReader("your file")
    Dim pipes As String()

    While x.Peek() <> -1
        pipes = x.ReadLine.ToString().Split("|")
        If pipes.Length <> 6 Then
            Dts.TaskResult = ScriptResults.Failure
            Return
        End If
    End While

    Dts.TaskResult = ScriptResults.Success

例如,我有一个10行的平面文件。在这10行中,5行用管道分隔,其余5行用逗号分隔。在这种情况下,我们需要使作业失败,并且类似用户的文件具有无效的格式化记录。但是,当我尝试这种类型的文件时,job成功加载了5条具有管道分隔符的记录。其余5条带有逗号分隔符的记录将被忽略。好的,您需要验证整个文件。如果至少有一行具有少于或多于5个管道,我将代码更改为任务失败。是的,这将起作用。除了此方法之外,我们是否还有其他选项来验证这些类型的文件?。在我的例子中,平面文件包含超过500万条记录。如果我要以这种方式进行验证,将需要很多时间。如果你有其他选择的话,这可能是一个很好的选择。