在数据字段中使用逗号导入CSV

时间:2013-11-18 21:38:34

标签: sql-server tsql csv import delimiter

我正在导入几个大型CSV文件。在这个过程中,我发现了两个重要的信息:

  1. 某些数据字段包含常用分隔符(逗号,管道和标签);
  2. 我发现CSV实际上有几个CSV由一行没有数据合并在一起。

1 个答案:

答案 0 :(得分:1)

看到这个问题出现了很多次,有几个不同的答案,而且很少有答案仅限于SQL查询,所以我写的是:

 CREATE TABLE #table1
 (
  data varchar(max)
 )

 BULK
 INSERT table1
 FROM 'C:\Import\file.csv'
 WITH
 (
      FIRSTROW = 1,
      FIELDTERMINATOR = 'somethingthatdoesntexist',
      ROWTERMINATOR = '0x0A'
 ) 
 GO

 ALTER TABLE table1 ADD id numeric NOT NULL IDENTITY(1,1)

 ALTER TABLE report_table ADD CONSTRAINT
      pk_id PRIMARY KEY CLUSTERED
      (
           id
      ) WITH (
           statistics_norecompute = off,
           ignore_dup_key = off,
           allow_row_locks = on,
           allow_page_locks = on
 )
 ON [PRIMARY]

从那里,您可以使用适当的意识形态来构建标题所在的位置。第一行(或第一行X)应该是标题,然后是空行之后的第一行。然后检查匹配或创建新表的现有表,并将该数据导入下一个空行。泡沫,冲洗,重复。

 -- Create Processed(FALSE).  Set to TRUE when properly imported.
 ALTER TABLE table1 ADD processed bit NOT NULL
      CONSTRAINT c_is_processed_default_no DEFAULT FALSE

 -- Create Flagged(FALSE).  Set to TRUE when manual review required.
 --     Final step: set Flag = 1 where processed = 0; SELECT * FROM table1 WHERE flag = 1
 ALTER TABLE table1 ADD flag bit NOT NULL
      CONSTRAINT c_manual_review_default_no DEFAULT FALSE

公平警告,我导入的CSV非常大,所以我不得不解决内存错误。目前,我正在通过单独执行每个步骤来解决这个问题。