Sql server 使用ACE SQL server从Excel 2010文件中读取超过254列

Sql server 使用ACE SQL server从Excel 2010文件中读取超过254列,sql-server,vba,excel,Sql Server,Vba,Excel,我正在使用连接字符串 szConnect = "Provider=Microsoft.ACE.OLEDB.12.0;" & _ "Data Source=" & fpath & fname & ";" & _ "Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1;"";" Set rsData = New ADODB.Recordset 'Run the query as adCmdText rsData.Ope

我正在使用连接字符串

szConnect = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & fpath & fname & ";" & _
"Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1;"";"

Set rsData = New ADODB.Recordset
'Run the query as adCmdText
rsData.Open szSQL, szConnect, adOpenForwardOnly, adLockReadOnly, adCmdText

'Check if data exists for query
If Not rsData.EOF Then
    rtnArr = rsData.GetRows  'if the recordset contains data populate the array
Else
    dEmp = True 'no data flag true
    ReDim rtnArr(0 To 0, 0 To 0)
End If
从外部Excel 2010文件在VBA中运行SQL查询。该文件有40多个工作表,每个工作表大约有369列宽,根据SQL server的限制,SQL目前只返回前255列数据。许多讨论此问题的论坛建议将工作簿转换为平面(.csv),但这并不理想。有人有其他的解决办法吗?还是一种强行穿过额外柱子的方法


谢谢

ADO在连接到Excel时限制为255个字段。(有关限制,请参阅-ACE/JET/Access是复杂关联的)

最好是尝试以excel文件的形式打开excel文件,然后读取单元格以创建insert语句

Dim xlApp As Object
Dim OWorkbook As Object

Set xlApp = CreateObject("Excel.Application")
Set OWorkbook = xlApp.workbooks.Open("MyFile.xlsx")

With OWorkbook.Worksheets(1)
    c1 = .Cells(RowCount, 1).value
    ...
    c290 = .Cells(RowCount, 290).value
然后构造插入

strInsertSQL = "INSERT INTO [MyDB].[dbo].[MyTable] ([Val1],[Val2],...,[Val290])"

strSQLValues = " VALUES (" & c1 & ", '" & c2 & "'," & ... & c290 & ")"
cmd.ActiveConnection = "Provider=SQLNCLI11;Server=MyServer;Database=MyDB"
cmd.CommandText = strInsertSQL & strSQLValues
cmd.CommandTimeout = 0
cmd.Execute 'strInsertSQL & strSQLValues

根据需要增加
RowCount
行数

谢谢,但这对我不起作用。。也许是因为我代码的另一部分?我将编辑这个问题以包含更多细节。ADO是一个接口,而不是SQL引擎。OP使用ADO连接到ACE/JET引擎(Window.dll文件),Excel/Access和其他窗口程序可以连接到该引擎。此SQL引擎的列数限制为255。但是,如果OP直接连接到SQL Server、Oracle、DB2,仍然使用ADO,则不应出现这样的列限制。@Parfait,通过ADO连接到Excel,这确实会受到255个字段的限制。我知道ADO到SQL server有1024个字段的限制,但是SQL server不是数据源,这里没有SQL server连接。您正在连接到工作簿源。虽然ACE/JET引擎(用于MS Office/Windows产品)的列数限制为255,但SQL Server没有,如果通过ADO直接连接到MSSQL,则所有数据都应返回。