Hola, utilizar una subconsulta en la clausula Where siempre será lento. Emplea el asistente de no coincidentes para entender como relacionar ambas tablas en la clausula From y obtener los registros que te faltan en la que está alojada en sql server.
Con lo anterior ya notarás una gran mejora de rendimiento, pero si quieres optimizar mas, piensa que ahora tienes alojadas las tablas en dos sitios, pero que utlizas un tercero (Access) para procesar la consulta. Si el archivo Excel y el servidor sql comparten una misma red, te recomendaria crear en Sql Server un servidor vinculado al libro de Excel y desarrollar un store procedure en el primero para actualizar la tabla.
A modo de ejemplo este seria el script para crear el servidor vinculado (Versión Excel 2003, nombre del servidor vinculado: EXCEL_CUSTOMERS, la hoja con datos se llama Customers):
USE [master] GO
EXEC master.dbo.sp_addlinkedserver @server = N'EXCEL_CUSTOMERS', @srvproduct=N'Excel', @provider=N'Microsoft.Jet.OLEDB.4.0', @datasrc=N'C:\ruta del archivo\Customers.xls', @provstr=N'Excel 8.0'
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'EXCEL_CUSTOMERS',@useself=N'False',@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULL GO
-------------------------------------------------------------------------------------------------------------------
Después de ejecutar el script anterior, dispondrás de una conexión estable al libro de Excel (el servidor vinculado EXCEL_CUSTOMERS) que podrás usar en una consulta como si se tratara de una tabla o una vista. El código sql para actualizar la tabla (Customers) con los registros nuevos del Excel:
Insert Into [dbo].[Customers] Select T.* From [EXCEL_CUSTOMERS]...Customers$ T Left Join [dbo].[Customers] On [dbo].[Customers].[CustomerID]=T.[CustomerID] Where [dbo].[Customers].[CustomerID] Is Null
Los tres puntos entre el servidor vinculado y el nombre la hoja, no son un capricho, son necesarios, así como el simbolo $ para cerrar el nombre de la hoja.
Saludos.
------------- Ramon desde Terrassa.
http://www.sqlraipon.blogspot.com/" rel="nofollow - Mi blog
|