导入 CSV 文件

Cra*_*ein 3 sql-server

目前,我们在 SQL Server 2000 上有一个 DTS 包,它导入一个名为 suicoweb.csv 的文件。DTS csv 文件属性页面如下所示。

属性页 1

在此处输入图片说明

这是来自 CSV 文件的示例行

500071;343497;260712;|Some Text; : employer : some more text|;29
Run Code Online (Sandbox Code Playgroud)

列由分号 (;) 分隔,文本限定符是管道 (|),行由回车符分隔

使用 Brownstone 先生的回答,我使用以下命令创建了一个格式文件:

bcp databasename.dbo.tablename 格式 nul -c -fd:\formatfile.fmt -T

这是该文件的输出:

9.0
18
1       SQLCHAR       0       510     "|"     1     web1numdoss
2       SQLCHAR       0       510     "|"     2     web1dem
3       SQLCHAR       0       510     "|"     3     web1def
4       SQLCHAR       0       510     "|"     4     web1douv
5       SQLCHAR       0       510     "|"     5     web1dversjj
6       SQLCHAR       0       510     "|"     6     web1dversmm
7       SQLCHAR       0       510     "|"     7     web1dversaa
8       SQLCHAR       0       510     "|"     8     web1mntvers
9       SQLCHAR       0       510     "|"     9     web1soldos
10      SQLCHAR       0       510     "|"     10    web1dactjj
11      SQLCHAR       0       510     "|"     11    web1dactmm
12      SQLCHAR       0       510     "|"     12    web1dactaa
13      SQLCHAR       0       510     "|"     13    web1actnat
14      SQLCHAR       0       510     "|"     14    web1actlib
15      SQLCHAR       0       510     "|"     15    web1archdoss
16      SQLCHAR       0       510     "|"     16    web1numdem
17      SQLCHAR       0       510     "|"     17    web1numdef
18      SQLCHAR       0       510     "\r\n"   18    Col018
Run Code Online (Sandbox Code Playgroud)

我用管道(|)替换了 \t 因为这是我想用作文本限定符的东西。

然后我使用这个 BULK INSERT 命令导入:

BULK INSERT ScpCambron.dbo.suicoweb1
   FROM 'D:\SqlFtp\scpcambron\suicoweb1.txt'
   WITH
      (
        FIELDTERMINATOR = ';',
        ROWTERMINATOR = '\n',
        FORMATFILE='D:\SqlFtp\scpcambron\suicoweb1.fmt'
      )
Run Code Online (Sandbox Code Playgroud)

当我尝试使用 BULK INSERT 命令导入 csv 文件时,出现以下错误:

消息 4864,级别 16,状态 1,第 1 行,第 2 行第 1 列 (web1numdoss) 的批量加载数据转换错误(指定代码页的类型不匹配或无效字符)。

关于如何修改格式文件以正确导入 csv 文件的任何建议?我应该使用 BCP 来导入我的表的 csv 文件吗?

Wor*_*DBA 7

根据您的描述,听起来您需要为 BULK INSERT 命令提供一个格式文件,以便它知道如何解析您的数据。您可以使用 bcp 命令为您自动生成一个,但是在它们正常工作之前我总是不得不在之后编辑它们。(恐怕要进行大量测试)。

以下链接应该是您的良好起点:

格式文件: http : //msdn.microsoft.com/en-us/library/ms190393.aspx

BCP: http : //msdn.microsoft.com/en-us/library/ms162802.aspx

批量插入: http : //msdn.microsoft.com/en-us/library/ms188365.aspx

示例: http : //msdn.microsoft.com/en-us/library/ms178129.aspx

我希望这可以帮助你。

编辑

根据您在上面添加的额外信息,您似乎已将所有字段终止符设置为管道,这不是您想要的。您需要按列编辑格式文件。

例如,在上面的示例中,前两列由分号分隔。第三个需要用“;|”分隔。这是我对前几列的意思的示例:

9.0 
18 
1       SQLCHAR       0       510     ";"     1     web1numdoss 
2       SQLCHAR       0       510     ";"     2     web1dem 
3       SQLCHAR       0       510     ";|"     3     web1def 
...
18      SQLCHAR       0       510     "\r\n"   18    Col018 
Run Code Online (Sandbox Code Playgroud)