1

我有一个包含股票报价的 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,也没有在那里工作。

由于我是新人,我可能需要详细解释它。

4

2 回答 2

1

声明中似乎有一个多余的逗号CREATE TABLE。在结束括号之前的最后一列后面有一个逗号。也许它在某些实现中是有效的,但您可以尝试删除它。将其更改为:

Volume varchar(10)

啊 - 在第二列定义中似乎有一个无关的关闭父级。将其更改为:

dateval smalldatetime,

和时间栏:

timevale time,

最终,您似乎应该尝试使 CREATE TABLE 语句语法正确,然后开始添加其他部分。

于 2012-08-24T23:30:24.427 回答
0

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

我认为timevale应该是timeval

time()应该只是time

另外,我可能很挑剔,但您已将除前两个之外的所有列名的第一个字母大写 - 不会导致错误,但可能更好地使用一致的命名约定。我会将 val 中的“v”大写并写下整个单词。

CSV 数据也需要修改 - 您需要指定每一列,即使它为空。请参阅我的示例数据(每行末尾的新行仅用于说明目的)。

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),您可以通过用户界面创建表,然后:

  • 右键单击表格
  • 脚本表为
  • 创建到
  • 新的查询编辑器窗口
于 2012-08-24T23:59:53.337 回答