[SQL Server] 利用OpenRowset Select txt or csv 資料

常見匯入(查詢) txt or csv到Ms Sql的方法有很多,但是如果要在加上一些條件去限制時,
可以利用SSIS、OpenQuery、OpenRowset去做,

由於發問者的Express並不支援SSIS,
而OpenQuery需要搭配LinkServer去做,如果檔案位置有甚麼改變,則需要再調整,似乎比較麻煩。

因此想測試看看利用OpenRowset的方式...

原問題 - 

常見匯入(查詢) txt or csv到Ms Sql的方法有很多,但是如果要在加上一些條件去限制時,
可以利用SSIS、OpenQuery、OpenRowset去做,
 
由於發問者的Express並不支援SSIS,
而OpenQuery需要搭配LinkServer去做,如果檔案位置有甚麼改變,則需要再調整,似乎比較麻煩。
 
因此想測試看看利用OpenRowset的方式,
由於根據預設,SQL Server 不允許使用 OPENROWSET 和 OPENDATASOURCE 進行特定分散式查詢。
因此可以利用指令去打開AdHocRemoteQueriesEnabled的功能 [此部分可以參考德瑞克大的這篇文章]
 
sp_configure 'show advanced options', 1;
RECONFIGURE;
sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE;
GO

之後就可以利用這樣的語法去將txt or csv的檔案資料抓進來

select * from 
OpenRowset('MSDASQL', 'Driver={Microsoft Text Driver (*.txt; *.csv)};  DBQ=C:\test;','select * from Animal.csv')
where SUBSTRING(Name,1,2)='姓名'

需要注意的是

OpenRowset會用第一列的資料當作欄位名稱,因此也可以去做其他的應用了。
 
目前測試的時候 32位元的OS 是OK,
但如果是64位元的話,會冒出錯誤訊息,還需要去找解決方法~"~
 
 
--
感謝Cary的幫忙和指教XDD 
這篇算是我在點部落寫的第一篇文章,
之後會慢慢整理與撰寫其他文章,還請各位多多指教。
 

 


歡迎大家一起到MSDN學習與討論