将CSV导入SQL(CODE)

时间:2017-08-04 11:55:55

标签: sql sql-server

我想使用SQL代码自动导入多个CSV文件(即不使用GUI)。通常,我知道我的CSV文件的尺寸。因此,在许多情况下,我创建一个空表,比如说x列和相应的数据类型。然后,我使用BULK INSERT将CSV文件导入此表。但是,在这种情况下,我对我的文件了解不多,即没有给出有关数据类型和尺寸的信息。

总结问题:

  

我收到一个文件路径,例如C:\ DATA.csv。然后,我想在SQL代码中使用此路径将文件导入表中,而不知道任何相关内容。

关于如何解决这个问题的任何想法?

2 个答案:

答案 0 :(得分:3)

Use something like this:

BULK INSERT tbl
FROM 'csv_full_path'
WITH
(
FIRSTROW = 2, -- secopnd row if header row in file
FIELDTERMINATOR = ',',  --CSV field delimiter
ROWTERMINATOR = '\n',   --Use to shift the control to next row
ERRORFILE = 'error_file_path',
TABLOCK
)

If coulmns are not known, you could try with:

select * from OpenRowset

Or, do a bulk insert with only the first row as one big column, then parse it to create the dynamic main insert. Or bulk insert the whole file into a table with just one column, then parse that..

答案 1 :(得分:1)

You can use OPENROWSET (documantation).

SELECT * 
INTO dbo.MyTable
FROM 
OPENROWSET(
   BULK 'C:\...\mycsvfile.csv',
   SINGLE_CLOB) AS DATA;

In addition, you can use dynamic SQL to parameterize table name and location of csv file.