创建表,并从csv或txt文件导入数据

时间:2012-08-24 23:22:50

标签: sql import-from-csv

我有一个包含股票报价的CSV文件。在SQL方面我是新手,但我已经做了很多研究,并提出了一些我认为应该有用的代码。但事实并非如此。我一直都有错误......

USE ShakeOut 
GO
CREATE TABLE CSVTest1
(Ticker varchar(10),
dateval smalldatetime),
timevale time(),
Openval varchar(10),
Highval varchar(10),
Lowval varchar(10),
Closeval varchar(10),
Volume varchar(10),
)
GO

BULK
INSERT CSVTest1
FROM 'c:\TEST.txt'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)
GO
--Check the content of the table.
SELECT *
FROM CSVTest1
GO
--Drop the table to clean up database.
DROP TABLE CSVTest1
GO

我的CSV文件的时间值为03:15:00 PM,我不知道如何在表格中设置它。我认为其他值是正确的,这是我的csv文件的样本:

5/1/2009,9:30:00 AM,18.21,18.45,18.21,18.32,32163
5/1/2009,9:35:00 AM,18.33,18.34,18.27,18.29,36951
5/1/2009,9:40:00 AM,18.29,18.38,18.25,18.37,53198
5/1/2009,9:45:00 AM,18.38,18.4,18.28,18.285,49491

这是我在SQL Management Studio中的错误消息:

Msg 102, Level 15, State 1, Line 4 Incorrect syntax near ','. Msg 208,
Level 16, State 82, Line 3 Invalid object name 'CSVTest1'. Msg 208,
Level 16, State 1, Line 3 Invalid object name 'CSVTest1'. Msg 3701,
Level 11, State 5, Line 3 Cannot drop the table 'CSVTest1', because it
does not exist or you do not have permission.

我真的非常感谢这里的帮助,我的头在这几个小时后即将爆炸而没有任何进展。我也试过MySQL,也没在那里工作。

由于我是新手,我可能需要详细说明。

2 个答案:

答案 0 :(得分:1)

您似乎在CREATE TABLE声明中有一个无关的逗号。在闭幕前的最后一栏之后有一个逗号。也许它在某些实现中是有效的,但您可以尝试删除它。将其更改为:

Volume varchar(10)

啊 - 并且看起来在第二列定义中存在无关的关闭父级。将其更改为:

dateval smalldatetime,

时间栏:

timevale time,

最终,您可能只是尝试使CREATE TABLE语句语法正确,然后开始添加其他部分。

答案 1 :(得分:0)

最后一列定义后不需要逗号:Volume varchar(10),

我认为timevale应为timeval

time()应为time

另外,我可能很挑剔,但你已经将所有列名的第一个字母大写,除了前两个 - 不会导致错误,但可能更好地拥有一致的命名约定。我会把val中的'v'大写并写出整个单词。

CSV数据也需要修改 - 您需要指定EVERY列,即使它是null。查看我的示例数据(每行末尾的新行仅用于说明目的)。

1234567890,2012-08-25,22:15,anytext,ornum,for,varchar,columns <-new line
abcd123456,2010-05-20,00:01,anything,in,these,varchar,columns <-new line
abcd123456,2010-05-20,00:01,anything,in,,,columns             <-new line

这有效:

CREATE TABLE CSVTest1 (
    Ticker varchar(10) NULL,
    DateValue smalldatetime NULL,
    TimeValue time NULL,
    OpenValue varchar(10) NULL,
    HighValue varchar(10) NULL,
    LowValue varchar(10) NULL,
    CloseValue varchar(10) NULL,
    Volume varchar(10) NULL)
GO

BULK INSERT CSVTest1
FROM 'C:\TEST.txt'
WITH (FIELDTERMINATOR = ',', ROWTERMINATOR = '\n')
GO

您的CSV文件需要为要插入的每条记录添加新行,如ROWTERMINATOR = '\n'所指定,以及FIELDTERMINATOR = ','指定的每个字段之间的逗号。

编辑:

顺便说一下,如果您使用的是SQL Server Management Studio(SSMS),则可以通过用户界面创建表,然后:

  • 右键单击表格
  • 脚本表格为
  • 创建
  • 新查询编辑器窗口
相关问题