Sql 如何将管道作为管道分隔文件中的数据处理

Sql 如何将管道作为管道分隔文件中的数据处理,sql,sql-server,ssis,etl,flat-file,Sql,Sql Server,Ssis,Etl,Flat File,我试图解决我的csv数据如下所示的问题: A|B|C "Jon"|"PR | RP"|"MN" "Pam | Map"|"Ecom"|"unity" "What"|"is"this" happening"|"?" 也就是说,它是以管道分隔的,并且有引号作为文本限定符,但它在数据值中也有管道和引号。我已经试过了 根据评论进行更新 我试图选择|作为分隔符,选择“作为文本限定符,但在尝试将数据导入OLEDB目标时,我收到以下错误: 找不到列B的列分隔符 您必须将平面文件连接管理器中的列分隔符属性更

我试图解决我的csv数据如下所示的问题:

A|B|C 
"Jon"|"PR | RP"|"MN"
"Pam | Map"|"Ecom"|"unity"
"What"|"is"this" happening"|"?"
也就是说,它是以管道分隔的,并且有引号作为文本限定符,但它在数据值中也有管道和引号。我已经试过了

根据评论进行更新

我试图选择
|
作为分隔符,选择
作为文本限定符,但在尝试将数据导入OLEDB目标时,我收到以下错误:

找不到列B的列分隔符


您必须将
平面文件连接管理器中的
列分隔符
属性更改为
|
(垂直条),将
文本限定符
属性更改为

如果这些仍不起作用,则平面文件源中有一些坏行,必须使用错误输出进行处理:


实际上,我最后编写了一个c夏普脚本,删除了SSIS中的首引号和最后一个引号,并将列分隔符设置为quote pipe quote(“|”)。代码如下:

public void Main()
    {
        String folderSource = "path";
        String folderTarget = "path";

        foreach (string file in System.IO.Directory.GetFiles(folderSource))
        {
            String targetfilepath = folderTarget + System.IO.Path.GetFileName(file);
            System.IO.File.Delete(targetfilepath);
            int icount = 1;
            foreach (String row in System.IO.File.ReadAllLines(file))
            {
                if (icount == 1)
                {
                    System.IO.File.AppendAllText(targetfilepath, row.Replace("|", "\"|\""));

                }
                else
                {

                    System.IO.File.AppendAllText(targetfilepath, row.Substring(1, row.Length - 2));
                }
                icount = icount + 1;
                System.IO.File.AppendAllText(targetfilepath, Environment.NewLine);
            }
        }

        Dts.TaskResult = (int)ScriptResults.Success;
    }

如果数据中同时包含引号和管道,则是时候同时更改分隔符和文本标识符(或至少更改文本标识符)。这不是有效的CSV文件。如果选择
作为文本限定符,选择
作为列分隔符,会发生什么情况?最后一行的正确转义是
“What”|“this”“oching”|?“
Hadi,当我这样做时,虽然在平面文件连接管理器中,它可以根据我的需要预览列,但当我将其导出到OLE DB目标时,它会说找不到列B的列分隔符。Hadi,这就是我一直在做的事情,但问题是当您将它连接到OLE DB时,它会失败destination@Yogita我认为存在错误行,您应该使用平面文件源的错误输出来检索这些行rows@yogita检查以下链接@yogita实现这一点的唯一方法如前所述,设置分隔符并使用错误输出选项。不幸的是,设置分隔符并使用错误输出对我来说并不太有效。