我有一个包含股票报价的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,也没在那里工作。
由于我是新手,我可能需要详细说明。
答案 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),则可以通过用户界面创建表,然后: