代码之家  ›  专栏  ›  技术社区  ›  John M Gant aman_novice

SQL Server BCP是否可以在具有Unix行尾的文件中?

  •  3
  • John M Gant aman_novice  · 技术社区  · 15 年前

    我正在尝试使用SQL Server BCP实用工具从Samba共享导入文本文件。bcp在unix行尾阻塞。我确信我可以在Unix或Windows上添加一个中间步骤,将行尾更改为Windows样式。但是我更喜欢从Unix导入文件而不进行修改。

    有人知道有没有办法让SQL Server BCP查找Unix行尾?

    6 回复  |  直到 8 年前
        1
  •  2
  •   ktharsis    14 年前

    必须将格式文件与bcp一起使用,并将终止符指定为\n。交互式命令行将始终追加\r,其中格式文件将完全使用您指定的格式。参考文献 http://www.eggheadcafe.com/software/aspnet/32239836/bcp-out-with-char10-as-row-terminator.aspx .

    创建一个格式文件在BOL中解释得很好,但是如果需要帮助,请评论/更新原始文章。

        2
  •  5
  •   trincot    8 年前

    简单的答案是使用十六进制,正如其中一条注释中提到的,作为行终止符:

    -r 0x0a
    
        3
  •  2
  •   CSharpAtl    15 年前

    是否尝试设置rowTerminator='\n'?

        4
  •  2
  •   bobs    14 年前

    我认为您不能从bcp命令行执行此操作。但是,我认为下面的SQL版本可以工作。

    DECLARE @Command nvarchar(1000)
    
    SET @Command = N'BULK INSERT MyTable
    FROM ''<path\file>''
    WITH (ROWTERMINATOR = '''+CHAR(10)+''')'
    
    exec sp_executeSQL @Command
    
        5
  •  0
  •   ZXX    14 年前

    如果您没有足够的时间来详细研究BCP,请查看以下内容: http://msdn.microsoft.com/en-us/library/ms190759.aspx

    它将为您提供简单的示例,解释交互式提示的含义,完成后保存格式的选项(如果要重复执行此操作)等。

    如果您的数据很大并且/或者您有多个想要的文件,您可以先创建一个表,然后进行一点尝试导出(bcp将简单地选择作为第一个参数),并且仍然可以交互地逐列选择格式。如果您有其他原因,可以稍后再挖掘保存的fmt文件。

        6
  •  -2
  •   dik    14 年前

    是的,这太令人恼火了。我的理解是,SQL Server BCP总是在您希望使用的行终止符之前插入一个。因此,如果不使用-r,则只希望使用\n。但它没有…它愚蠢地插入\r以便它可以使用\r\n。如果指定-r\r\n,它仍然无法工作;我怀疑,因为它现在需要\r\r\n行结束。这些都是一些白痴为Windows世界编写的代码所做的工作,它们试图让初学者的生活更轻松,最终却使其他人几乎不可能做到这一点。我在将文件从Sybase传输到SQL Server时遇到了这个问题,解决方案是在BCP中从Sybase中指定-r\r\n(这与您要求的完全一样!)和-r\n(或不使用-r)中的SQL Server BCP。