02/12/2008, 14:03
|
| Colaborador | | Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 20 años, 1 mes Puntos: 38 | |
Respuesta: Optimizar consulta SQL Como comentario, Si utilizas Bulk insert puedes formatear directamente el archivo para que te lo cargue en una tabla con campos separados y no tener que hacer uso de substrings....
Por otro lado, no se si te serviria un cross join, el cual es un producto cartesiano entre dos tablas.
Asi se hace el producto cartesiano de los registros y se insertan todos aquellos que no hallan sido insertado antes...
Y con lo dicho quedaria algo como:
Código:
if (select count(1) from cencostos) > 0
BEGIN
INSERT CuentasCeco(Expr1, Expr2, Expr3, Expr4, Expr5)
Select S.Expr1, S.Expr2, S.Expr3, S.Expr4, S.Expr5
FROM (SELECT DISTINCT
SUBSTRING(cs.cod_centro,1,7) +
SUBSTRING(
RTRIM(LTRIM(ISNULL(Cu.ACTNUMBR_1,''))) +
RTRIM(LTRIM(ISNULL(Cu.ACTNUMBR_2,''))) +
RTRIM(LTRIM(ISNULL(Cu.ACTNUMBR_3,''))) +
RTRIM(LTRIM(ISNULL(Cu.ACTNUMBR_4,''))) +
RTRIM(LTRIM(ISNULL(Cu.ACTNUMBR_5,''))) +
RTRIM(LTRIM(ISNULL(Cu.ACTNUMBR_6,''))) +
RTRIM(LTRIM(ISNULL(Cu.ACTNUMBR_7,''))) +
RTRIM(LTRIM(ISNULL(Cu.ACTNUMBR_8,''))),8, 17) AS Expr1
,SUBSTRING(Cu.ACTDESCR,1,51) AS Expr2
,SUBSTRING(RTRIM(LTRIM(Cu.ACCTTYPE)),1,3) AS Expr3
,SUBSTRING(cs.cod_centro,43,4) AS Expr4
,SUBSTRING(cs.cod_centro,1,7) AS Expr5
FROM cencostos cs
CROSS JOIN
gl00100 Cu ) S
Left outer join
CuentasCeco c
On S.Expr1 = c.Expr1
Where c.Expr1 is null
END
Cuenta como te fue.... Saludos!
__________________ La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications. |