Cómo resolver el error "No se pudo encontrar el ISAM instalable" para el proveedor OLE DB "Microsoft.ACE.OLEDB.12.0"
Estoy intentando importar datos de archivos Excel 2007 (.xlsx) a SQL Server 2008 usando un comando T-SQL OpenRowset () con el proveedor OLE DB "Microsoft.ACE.OLEDB.12.0", y obtengo un mensaje persistente Error "No se pudo encontrar el ISAM instalable". Todo el hardware es de 32 bits.
[Revisado el 10/01/12 para tratar de enfocarse más en las anomalías]
a siguiente instrucción T-SQL produce el error:
SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Data Source=C:\work\TestData.xlsx;Extended Properties="Excel 12.0 XML;HDR=YES"',
'SELECT * FROM [Sheet1$]'
)
Si guardo el archivo de Excel en el formato "Excel 97-2003" (.xls) y uso el proveedor anterior Microsoft.Jet.OLEDB.4.0 para importar los datos, funciona bien. Esto me hace pensar que no es un problema de seguridad u otro problema ambiental.
SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=C:\work\TestData.xls;HDR=YES',
'SELECT * FROM [Sheet1$]'
)
Sin embargo, cuando pruebo el archivo * .xls con el proveedor Microsoft.ACE.OLEDB.12.0, que debería ser compatible con el formato * .xls, vuelve a fallar con el mismo error:
SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Data Source=C:\work\TestData.xls;Extended Properties="Excel 8.0;HDR=YES";',
'SELECT * FROM [Sheet1$]'
)
También, curiosamente, cuando uso el asistente SSMS "Importar datos ...", funciona bien. Guardé la salida del asistente Importar datos como un paquete SSIS y busqué en el archivo SSIS para tratar de averiguar cómo funciona, y ES exitosamente usando el proveedor Microsoft.ACE.OLEDB.12.0. Esta es la cadena de conexión del paquete SSIS:
<DTS:Property DTS:Name="ConnectionString">
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\work\TestData.xlsx;Extended Properties="Excel 12.0 XML;HDR=YES";
</DTS:Property>
También hice la configuración relevante de SQL Server para permitir la consulta distribuida OPENROWSET:
sp_configure 'show advanced options', 1
reconfigure
GO
sp_configure 'Ad Hoc Distributed Queries', 1
reconfigure
GO
Si también configuro los siguientes valores * sp_MSset_oledb_prop * (que encontré en una publicación en alguna parte) ...
USE [master]
GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1
GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1
GO
... entonces el error cambia a "Error no especificado":
OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" returned message "Unspecified error".
Msg 7303, Level 16, State 1, Line 1
Cannot initialize the data source object of OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)".
Sin embargo, no estoy seguro de si se trata de un error aguas arriba o aguas abajo. (¿Ahora encuentra el "ISAM instalable" pero falla posteriormente?)
He intentado esto con varios archivos de Excel en dos máquinas / sistemas operativos diferentes (Windows Server 2003, Windows XP SP3). Ambas máquinas son de 32 bits.
También he intentado volver a instalar las versiones Office Access y Office 2010 de AccessDatabaseEngine.exe http: //www.microsoft.com/download/en/details.aspx? id = 23734 yhttp: //www.microsoft.com/download/en/details.aspx? id = 13255, respectivamente), en vano.
Para resumir
El proveedor "Microsoft.Jet.OLEDB.4.0" funciona con T-SQL, pero "Microsoft.ACE.OLEDB.12.0" no. "Microsoft.ACE.OLEDB.12.0" funciona con el asistente "Importar datos ..." (por lo que puedo deducir del archivo de trabajo SSIS guardado). Establecer las propiedades "AllowInProcess" y "DynamicParameters" en "1" cambia el error a "Error no especificado". (¡¿Eso es un paso adelante?!)¿Alguna idea