2015-09-09 94 views
0

我正在處理一個導入腳本,這個想法是將多個工作簿導入到一個表中。我已經取得了進展,所以我能夠將一個工作簿成功導入到我的表格中。我想要做的是創建一個查詢,它將循環一個文件夾讀取文件名並將數據導入Microsoft SQL Server Management Studio中的數據庫。SQL Server Excel工作表導入

--Creating the TABLE-- 
CREATE TABLE BrewinDolphinHoldings 
(
    recordID INT AUTO_NUMBER 
    FUNDNAME VARCHAR(25), 
    SEDOL VARCHAR(7), 
    ISIN VARCHAR(11), 
    NAME VARCHAR(20), 
    WEIGHT INTEGER(3) 
) 

constraint[pk_recordID]PRIMARYKEY 
(
    [recordID] ASC 
) 

INSERT INTO BrewinDolphinHoldings 
VALUES 
("HoldingsData', GB125451241, DavidsHoldings, 22) 

--SELECTING THE SHEET-- 

SELECT/UPDATE? * 
FROM OPENROWSET('Microsoft.JET.OLEDB.4.0', 
       'Excel 8.0;Database=X:\CC\sql\DEMO\SpreadsheetName + '.xlsx', 
       'SELECT * FROM [Sheet1$]') AS HoldingsData 

所以基本上我的問題是,我想創建一個循環的循環,將在目錄中讀取的文件名,而進口將在每次循環的時間讀了名字和導入相關的電子表格?所以,例如:

DECLARE SpreadsheetName as STRING 
DECLARE FileExtension as '.xlsx' 

FOR EACH ITEM IN DIRECTORY 
X=1 
Y=MAX 
FILENAME THAT LOOP READS = SpreadsheetName 
SELECT * FROM 
OPENROWSET('Microsoft.JET.OLEDB.12.0', 
'Excel 8.0;Database=X:\CC\sql\DEMO\SpreadsheetName + fileExtension.xls 
END LOOP 

所以,我想也許是這樣的?雖然我不知道該循環是否會覆蓋我的數據庫?也許而不是更新我應該使用INSERT? 我不想使用SSIS,最好是查詢,雖然如果有人可以推薦任何我可以看看,或者,幫助我這個循環這將大大幫助

我很樂意接受你們的新想法,所以如果任何人都可以嘗試修復我的代碼,或者給我多個excel表導入的例子,將不勝感激!

我是SQL Server的新手,我確實有一些以前的編程經驗!

謝謝!

回答

0

您可以使用bcp來執行您正在討論的任何類型的分隔文本文件,例如csv或文本製表符分隔符。如果可以將電子表格生成/保存爲csv並使用此方法。看到這些鏈接。

Import Multiple CSV Files to SQL Server from a Folder

http://www.databasejournal.com/features/mssql/article.php/3325701/Import-multiple-Files-to-SQL-Server-using-T-SQL.htm

如果它是Excel中,那麼你就不能使用BCP,但這些應該仍然幫助您對文件夾的循環邏輯。我以前從來沒有使用過excel openrowset,但是如果你的工作像你說的那樣,它應該能夠以相同的方式插入。即使無法使用bcp導入它,仍然可以使用xp_cmdshell/xp_dirtree查看這些文件並生成路徑。

How to list files inside a folder with SQL Server

然後,我會說,這將是最容易從一個select語句做一個刀片從OPENROWSET把它放到桌子上。

http://www.w3schools.com/sql/sql_insert_into_select.asp

確保xp_cmdshell的是在你的SQL Server實例使能的。

https://msdn.microsoft.com/en-us/library/ms190693(v=sql.110).aspx

+0

太好了,我會仔細研究一下。 – Coder1994UK