我想使用SQL代码自动导入多个CSV文件(即不使用GUI)。通常,我知道我的CSV文件的尺寸。因此,在许多情况下,我创建一个空表,比如说x
列和相应的数据类型。然后,我使用BULK INSERT
将CSV文件导入此表。但是,在这种情况下,我对我的文件了解不多,即没有给出有关数据类型和尺寸的信息。
总结问题:
我收到一个文件路径,例如C:\ DATA.csv。然后,我想在SQL代码中使用此路径将文件导入表中,而不知道任何相关内容。
关于如何解决这个问题的任何想法?
答案 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.