【问题标题】:Bulk Insert doesn't insert any rows批量插入不插入任何行
【发布时间】:2012-07-09 22:23:00
【问题描述】:

我正在将 CSV 文件中的数据导入临时表,然后将它们与“真实”表合并。

对于我的其他表,这很好用。但是对于这个特定的文件和表,似乎什么都没有发生。

CREATE TABLE #ManifestHeader (  
[ROTATIONNUMBER] [nvarchar](12) NOT NULL,
[ROTATIONVERSIONNO] [nvarchar](2) NOT NULL,
[IMONUM] [nvarchar](50) NULL,
[VESSELNAME] [nvarchar](35) NOT NULL,
[VOYAGENO] [nvarchar](17) NOT NULL,
[CARRIERCODE] [nvarchar](10) NULL,
[CARRIERNAME] [nvarchar](35) NULL,
[ETA] [datetime] NULL,
[ETD] [datetime] NULL,
[ACTUALARRIVALDATE] [datetime] NULL,
[LASTPORTOFCALL] [nvarchar](5) NULL,
[PORTARRIVAL] [nvarchar](5) NULL,
[PORTNEXT] [nvarchar](5) NULL,
[PORTFINAL] [nvarchar](5) NULL,    
[BERTHINGDATE] [datetime] NULL,
[CDRSTARTDATE] [datetime] NULL,
[CDRENDDATE] [datetime] NULL,
[CDRSUBMISSIONDATE] [datetime] NULL,
[NUMOFBOLS] [int] NULL,
)

BULK INSERT #ManifestHeader
FROM 'D:\csvfiles\ManifestHeader.csv'
WITH ( FIELDTERMINATOR = '<,>', ROWTERMINATOR = '\n', FIRSTROW = 2, KEEPIDENTITY );

SELECT * FROM #ManifestHeader;

最后一个 select 语句不返回任何内容,也没有显示错误。

CSV 文件包含数千行。示例行:

ROTATIONNUMBER<,>ROTATIONVERSIONNO<,>IMONUM<,>VESSELNAME<,>VOYAGENO<,>CARRIERCODE<,>CARRIERNAME<,>ETA<,>ETD<,>ACTUALARRIVALDATE<,>LASTPORTOFCALL<,>PORTARRIVAL<,>PORTNEXT<,>PORTFINAL<,>BERTHINGDATE<,>CDRSTARTDATE<,>CDRENDDATE<,>CDRSUBMISSIONDATE<,>NUMOFBOLS
12345678911<,>1<,>VB3BV<,>BLACKSTONE<,>020<,>MUNICA<,>MUNICA<,>2012-05-08 10:32:00<,>2012-05-08 11:32:00<,>2012-05-09 07:15:00<,>SGSIN<,>MZZPZ<,>MZZBW<,>MZZBW<,><,>2012-05-09 07:22:00<,><,>2012-05-09 07:22:26<,>1
12345678912<,>1<,>VB4BV<,>REDSTONE<,>021<,>MUNICA<,>MUNICA<,>2011-11-29 11:48:00<,>2011-11-30 11:48:00<,><,>ZADER<,>MZZPZ<,>ZARCB<,>MZZPZ<,><,><,><,><,>
12345678913<,>1<,>VB5BV<,>BLUESTONE<,>022<,>MUNICA<,>MUNICA<,>2012-05-09 08:00:00<,>2012-05-10 10:39:00<,>2012-05-09 11:11:00<,>ZADER<,>MZZPZ<,>ZARCB<,>ITCVV<,><,>2012-05-09 15:00:00<,><,>2012-05-07 11:14:42<,>1
12345678914<,>1<,>VB6BV<,>GREENSTONE<,>023<,>MUNICA<,>MUNICA<,>2012-05-29 07:00:00<,>2012-05-29 23:00:00<,>2012-05-29 09:12:00<,>LKCMB<,>MZMNC<,>MZMNC<,>SGSIN<,><,>2012-05-29 23:00:00<,>2012-05-30 12:00:00<,>2012-05-29 09:30:33<,>1

我会在这里遗漏什么?

【问题讨论】:

  • 讨厌问显而易见的问题 - 但您的文件中有任何内容吗?如果有,是否符合您的标准?
  • 您需要提供至少 2 行无法加载的 CSV 文件。
  • 文件有内容,我相信它符合条件。否则它不应该给我一条错误消息吗?
  • 我现在已经从 CSV 添加了示例行。
  • 鉴于您提供的代码和数据,这对我有用。您的源文件中可能有一些非打印字符,或不同的行终止符?

标签: sql sql-server sql-server-2008 csv bulkinsert


【解决方案1】:

Ed Harper 引导我朝着正确的方向前进:行终止符是错误的。

所以当我把它改成

ROWTERMINATOR = '0x0a' 

在 BULK INSERT(而不是 '\n')中它开始工作了。

【讨论】:

  • 我的服务器最近从 SQL Server 2005 迁移到 2012。但是昨天它与 \n 一起使用,而今天它只与 0x0a 一起使用。实际上,这里发生了什么?
  • 我认为将整数作为最后一列类型与需要以这种方式指定行终止符之间存在一些奇怪的相互作用...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多