【问题标题】:To fix a csv file so sql server can import the file修复 csv 文件,以便 sql server 可以导入文件
【发布时间】:2014-12-02 22:35:42
【问题描述】:

我有一个逗号分隔的 csv 文件,但它有一些带有逗号的地址字段和一个以双引号开头和结尾并在其中包含逗号的描述字段。 sql server 的导入向导只是添加了额外的列,因此该数据扩展到的其他字段的数据类型出现错误。 如果我使用 excel,则可以正确看到该字段,因此我可以导入它,但我想自动导入,所以不想在 excel 中打开每个文件(我有数千个文件)。

我试过powershell

DECLARE @file NVARCHAR(250);
DECLARE @cmd  NVARCHAR(255); 
SET @file='C:\path\filename' 
SET @cmd = 'powershell "Import-csv -path '+@file+'.csv -Delimiter '','' | Export-CSV -path '+@file+'_converted.csv -Delimiter ''|'' -NoType " '
EXEC master.dbo.xp_cmdshell

但得到错误

   output
   Import-Csv : A positional parameter cannot be found that accepts argument 
   'Premium'.
   At line:1 char:1
    + Import-csv -path C:\DWfilestoload\Collect Premium Insolvency Output.csv 
     -Delimit ...
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        ~~~
   + CategoryInfo          : InvalidArgument: (:) [Import-Csv], ParameterBind 
    ingException
   + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell 
   .Commands.ImportCsvCommand

    NULL

如果有任何其他想法可以让这个文件以良好的格式导入或交换分隔符,我已经尝试将 , 替换为 |但效果一样。

【问题讨论】:

  • 使用 FixedWidth 或 RaggedRight 选项生成文件,而不是使用定界符。
  • 作为生成文件的人,您可以使用| 管道分隔或您可以使用的格式生成文件。如果不是,那么您目前如何确定以逗号开头的地址和地址的结尾?
  • 我强烈建议直接打制作此文件的人的脸。
  • 是的,我是这么想的。数据有 sdfds,sdfdsf,"sdf,sdfd,",dfd,dfd.dfd 之类的东西,因此导入向导将在每个逗号处分隔 Excel 将接受 " 而不是分隔逗号therafter。我想我需要考虑编写某种批处理脚本来清理它,因为我需要自动化它。
  • 乱七八糟的权利不起作用,文件发送给我们。

标签: sql-server import ssis formatting


【解决方案1】:

例如,您可以添加一个文本限定符,以便数据值用引号引起来。或者想出一个更复杂的分隔符,比如 |~ 或者类似的组合是非常少见的。

【讨论】:

  • 你认为如果我可以添加一个额外的分隔符,如 " 或 |,它会将数据按原样放置。数据看起来像这个例子 asdf,asdf,"asdfd,afd,adf" ,dfd.....
  • 文本限定符更容易排除故障,因为您可以打开文件并更清楚地看到它,它看起来像这样:"asdf,asdf","asdfd,afd,adf","dfd"。管道对于一些数据集也是一个不错的选择,试试吧。
  • 我在 ssis 导入向导中找到了一个文本限定符选项,一旦我勾选它,带有双引号的整个列都会正确进入。
猜你喜欢
  • 2013-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多