如何獲得工作表名稱中使用SQL Sever的2005年Excel文件?獲取Excel工作表名稱在SQL Server
請注意的是:
- 沒有前端(C#,VB,PHP等);
- 我試圖讓使用無非是SQL Server 2005中單獨工作表名稱。
感謝。
如何獲得工作表名稱中使用SQL Sever的2005年Excel文件?獲取Excel工作表名稱在SQL Server
請注意的是:
感謝。
你不能。有兩種途徑可以從Excel讀取數據。一種是COM/OLE automation路線,它可以讓你枚舉工作簿中的工作表。這需要TSQL不會執行的程序語言。我甚至不認爲你是否允許使用CLR方法,你可以訪問Office庫,因爲它們不在BCL列表中。
第二條路線是在這種情況下通過openquery使用Jet driver,但作爲設置的一部分,您需要明確定義要訪問的文件和工作表。您可以放棄列出工作表名稱,但即使如此,Excel也不會將工作表的元數據暴露給我的占卜。
如果有人知道的另一種方式,但已經在切片多種方式這個問題,我會刪除這個答案,我還沒有想出了不歸結爲上述兩種方法中的一種答案。
至少有兩種可能這樣做。我會承認,我沒有一個簡單的方法來檢查SQL Server 2005,現在只有2008年。
:創建一個鏈接的服務器,並使用sp_tables_ex
和/或sp_columns_ex
:
-- Get table (worksheet) or column (field) listings from an excel spreadsheet
-- SET THESE!
declare @linkedServerName sysname = 'TempExcelSpreadsheet'
declare @excelFileUrl nvarchar(1000) = 'c:\MySpreadsheet.xls'
-- /SET
-- Remove existing linked server (if necessary)
if exists(select null from sys.servers where name = @linkedServerName) begin
exec sp_dropserver @server = @linkedServerName, @droplogins = 'droplogins'
end
-- Add the linked server
-- ACE 12.0 seems to work for both xsl and xslx, though some might prefer the older JET provider
exec sp_addlinkedserver
@server = @linkedServerName,
@srvproduct = 'ACE 12.0',
@provider = 'Microsoft.ACE.OLEDB.12.0',
@datasrc = @excelFileUrl,
@provstr = 'Excel 12.0;HDR=Yes'
-- Grab the current user to use as a remote login
declare @suser_sname nvarchar(256) = suser_sname()
-- Add the current user as a login
exec sp_addlinkedsrvlogin
@rmtsrvname = @linkedServerName,
@useself = 'false',
@locallogin = @suser_sname,
@rmtuser = null,
@rmtpassword = null
-- Return the table/column info
exec sp_tables_ex @linkedServerName
exec sp_columns_ex @linkedServerName
-- Remove temp linked server
if exists(select null from sys.servers where name = @linkedServerName) begin
exec sp_dropserver @server = @linkedServerName, @droplogins = 'droplogins'
end
我找到了靈感這個here。
:使用OLE自動化過程所概述here。我自己沒有嘗試過這個。
我正在考慮CLR方法...雖然我仍然需要做一些進一步的探討和研究。謝謝。 – Temp
@billinkc,這顯然很古老,但我想我可能偶然發現了一兩種方法。 –