如何导入带有动态工作表名称的Excel文件? (T-SQL)

时间:2013-08-07 18:04:44

标签: sql sql-server excel import worksheet

我基本上设置了一个在T-SQL中从Excel导入到SQL的过程:

SELECT *  FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0','Excel 8.0;HDR=YES;Database=C:\report.xls','select * from [name555$]')

名称555由固定名称组成,555由似乎是随机三位数字组成。当报告来找我时,有时名字是555,有时它是439,390等。

有没有办法指导SQL服务器(最好在T-SQL中,就像我现在正在使用的那样)动态读取名称?它是XLS文件中唯一的工作表,但它

例如,在VBA中,您可以将工作表用作name1 $ name或“sheet1 $”索引。好吧,我希望有人可以帮忙解决这个问题:)

1 个答案:

答案 0 :(得分:1)

您可以查询工作簿的SCHEMA以检索TABLE(工作表)名称。如果您的工作簿中只有一个工作表,则第一个有效的TABLE_NAME将成为工作表的名称。

下面给出(在VB.NET代码中)是一个帮助方法,我一直用于这种任务。函数的返回值将括号括在您的名称周围,因此可以在SQL语句中使用它。

''' <summary>
''' Returns the name of the first worksheet in an Excel workbook.
''' </summary>
''' <param name="connectString">OleDb connection string for an Excel workbook.</param>
''' <returns></returns>
''' <remarks></remarks>
Public Shared Function GetTableName(ByVal connectString As String) As String

  Dim dtSheets As New DataTable
  Dim tmp As String = ""

  Using cn As New OleDbConnection(connectString)
     cn.Open()
     dtSheets = cn.GetSchema("Tables")
  End Using

  For Each rw As DataRow In dtSheets.Rows
     'Get the name of the first worksheet in the file that ends
     'with a $.
     tmp = rw("TABLE_NAME")
     'Check to see if the table name is surrounded by apostorphes.
     If tmp.StartsWith("'") And tmp.EndsWith("'") Then
        'Remove the apostrophes.
        tmp = tmp.TrimEnd("'")
        tmp = tmp.TrimStart("'")
     End If

     If tmp.EndsWith("$") Then
        Exit For
     Else
        tmp = ""
     End If
  Next

  Return "[" & tmp & "]"

End Function