2012-08-24 156 views
1

我有一個包含股票報價的CSV文件。當談到SQL時,我是新的,但我做了大量的研究,並提出了一個我認爲應該可以工作的代碼。但事實並非如此。我得到的錯誤一路....創建表格,並從csv或txt文件導入數據

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文件TIMEVALUE爲下午3點15分00秒,我不知道如何設置了在表中。我認爲其他的值是aproxmately正確的,這是我的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

示例CSV文件與表定義不完全匹配。該表有一個「Ticker」列,但CSV示例沒有。 –

回答

1

看起來你在CREATE TABLE聲明中有一個無關的逗號。在最後一列之後有一個逗號。也許它在某些實現中是有效的,但您可以嘗試刪除它。將其更改爲:

Volume varchar(10) 

啊 - 並且在第二列定義中似乎存在多餘的關閉父項。將其更改爲:

dateval smalldatetime, 

而且時間列:

timevale time, 

最終,看來你應該只是試圖讓CREATE TABLE語句的語法正確,然後開始添加其他部分。

+0

嗨馬克我感謝您的幫助和建議,但不幸的是,它並沒有解決這個問題。我只是迷失在這裏,花了很多時間在VBA上...... –

+0

謝謝馬克,那是個好主意。我現在刪除了散裝部分,現在桌子正在工作。但是它會顯示AM/PM資料的日期嗎? –

+0

@EspenSkeie:我不太清楚我是否理解你的問題。我相信時間應該正確導入,但根據您的設置,我想它可能最終以24小時格式(而不是上午/下午)顯示。 –

0

最後一列定義後不需要逗號:Volume varchar(10),

我假設timevale應該是timeval

time()應該只是time

此外,我可能是挑剔的,但你已經大寫的所有列名的第一個字母除了前兩個 - 不會導致錯誤,但可能更好地有一個一致的命名約定。我會在val中大寫'v'並寫出整個單詞。

CSV數據也需要修改 - 您需要指定EVERY列,即使它爲空。查看我的示例數據(每行末尾的新行僅用於說明目的)。

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),您可以通過用戶界面,然後創建該表:

  • 右鍵單擊表
  • 腳本表爲
  • 創造
  • 新的查詢編輯器窗口
+0

非常感謝皮特。這非常有幫助,反應非常快。我在SQL中嘗試過某種導入/導出功能,但我會在本週末閱讀這些內容。我幾天前剛剛開始使用SQL,在我的知識中除了整體外什麼都沒有!謝謝:-) espen –

+0

這裏是一個很好的教程,用於將查詢結果導出到CSV文件:http://www.sqlservercentral.com/blogs/waterox-sql/2014/08/19/export-a-ssms-query-結果集到CSV / – Elaskanator