获取Excel工作表名称在SQL Server中

Tem*_*emp 3 sql-server excel sql-server-2005 worksheet

如何使用SQL Sever 2005在Excel文件中获取工作表名称?

请注意:

  • 没有前端(C#,VB,PHP等);
  • 我试图仅使用SQL Server 2005来获取工作表名称.

谢谢.

Tim*_*ner 16

这样做至少有两种可能性.我将在前面承认,我现在没有一种简单的方法可以在SQL Server 2005中检查这一点.

1:创建链接服务器并使用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
Run Code Online (Sandbox Code Playgroud)

我在这里找到了灵感.

2:使用此处概述的Ole Automation程序.我自己没试过这个.