2013-12-18 56 views
0

我一直在創建一個存儲過程來將一個.xlsx文檔導入到SQL表中。如果我爲.xlsx文件使用靜態數據庫路徑,它將無任何問題。我遇到的問題是公司的多個分支將創建特定於其分支的文件。文件名將始終採用Airport Code_date.xlxs的格式。.xlsx to SQL(導致數據庫字符串問題)

任何人都可以幫助我正確地獲得@pathToFile工作。每次我嘗試將它添加到數據庫字符串時,我收到了錯誤。我沒有發佈完整的代碼,以使其更易於閱讀。如果您需要完整的代碼,請告訴我。

感謝,

FROM OPENROWSET 
(
'Microsoft.ACE.OLEDB.12.0', 
'Excel 12.0;Database=' + @pathToFile, 
'SELECT * FROM [sheet1$]' 
) 
+0

你得到什麼錯誤? – Raymund

+0

1.您是否安裝了ACE 2.如果您對文件名進行硬編碼會發生什麼情況3.該文件位於服務器上嗎? 4. SQL進程有權查看文件? –

回答

4

你需要爲這個動態SQL,因爲OPENROWSET的參數必須是常量。

DECLARE @sql varchar(max) 

SET @sql = 'SELECT * FROM OPENROWSET(''Microsoft.ACE.OLEDB.12.0'',' + QUOTENAME('Excel 12.0;Database='[email protected],CHAR(39)) + ',''SELECT * FROM [sheet1$]'')' 

INSERT DestinationTable 
EXEC sp_executesql @sql 

的QUOTENAME()是爲了防禦SQL注入,因爲@pathtofile不能被參數化。

+0

這樣做。非常感謝你。我一直在爲此奮戰數小時。 –