我基本上设置了一个在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 $”索引。好吧,我希望有人可以帮忙解决这个问题:)
答案 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