2012-02-27 172 views
1

基本上,我想导入数百CSV文件导入到SQL Server 2008中导入CSV文件导入到SQL Server 2008中

文件格式如下:

<Ticker>,<DTYYYYMMDD>,<Open>,<High>,<Low>,<Close>,<Volume> 
AAM,20120110,21.6,22.8,21.4,21.6,3510 
AAM,20120109,22.2,22.9,22.0,22.2,1130 
AAM,20120105,0.0,23.0,22.2,22.2,210 

我想:

BULK 
INSERT BBB 
FROM 'D:\FIFA\excel_aam.csv' 
WITH 
(
FIRSTROW = 2, 
FIELDTERMINATOR = ',', 
ROWTERMINATOR = '/n' 
) 
GO 

但它没有工作。所以我在想导入CSV文件varchar格式,然后更改每列以正确的数据类型后,像这样:

CREATE TABLE BBB (
TICKER VARCHAR(15)NULL, 
INDEXDATE VARCHAR(15) PRIMARY KEY, 
OPENPRICE VARCHAR(15) NULL, 
HIGHPRICE VARCHAR(15) NULL, 
LOWPRICE VARCHAR(15) NULL, 
CLOSEPRICE VARCHAR(15) NOT NULL, 
VOLUME VARCHAR(15)) 
GO 

,但它给我的错误:

消息4863,级别16 ,状态1行1
第1行第7列(VOLUME)的批量加载数据转换错误(截断)。

那么,我该如何将这些文件(很多文件,我无法使用导入和导出向导)正确导入SQL Server?

+0

你看过SSIS吗? – Oded 2012-02-27 13:43:17

+0

尚未,谢谢,我只是Sql初学者... – 2012-02-27 13:53:50

+1

SSIS不是SQL。我建议搜索这个术语并学习这个SQL Server特性。 – Oded 2012-02-27 13:54:39

回答

0

对于进口如此多的文件听起来像是日子会把你需要SSIS

0

它工作得很好,在我的情况,当我刚刚变化的ROWTERMINATOR到\n/n

--CREATE TABLE BBB (
--TICKER VARCHAR(15)NULL, 
--INDEXDATE DATETIME, 
--OPENPRICE DECIMAL(12,4), 
--HIGHPRICE DECIMAL(12,4), 
--LOWPRICE DECIMAL(12,4), 
--CLOSEPRICE DECIMAL(12,4), 
--VOLUME DECIMAL(20,4)) 
--GO 

BULK INSERT BBB 
FROM 'D:\FIFA\excel_aam.csv' 
WITH 
(
    FIRSTROW = 2, 
    FIELDTERMINATOR = ',', 
    ROWTERMINATOR = '\n' 
) 
GO 

(3 row(s) affected) 

我现在有BBB表中的行....

+0

奇怪的是,当我用这个代码与“原始”文件,它总是0行受到影响,但是当我删除最后一行时,它是成功的,我试着用一些文件和相同的错误。 – 2012-02-27 15:23:54