Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Multiple-step OLE DB errors y SQL en un store procedure

Estas en el tema de Multiple-step OLE DB errors y SQL en un store procedure en el foro de SQL Server en Foros del Web. Saludos a todos, tengo el siguiente problema con un store procedure que realizo para hacer unas validaciones en una tabla temporal Y a la hora ...
  #1 (permalink)  
Antiguo 01/04/2011, 19:35
 
Fecha de Ingreso: marzo-2011
Ubicación: Mexico
Mensajes: 11
Antigüedad: 13 años
Puntos: 0
Multiple-step OLE DB errors y SQL en un store procedure

Saludos a todos, tengo el siguiente problema con un store procedure que realizo para hacer unas validaciones en una tabla temporal




Y a la hora de ejecutarlo en una pagina ASP me manda el siguiente error

Error [Multiple-step OLE DB operation generated errors. Check each OLE DB status value, if available. No work was done.]

Pero si tomo el store y lo corro en Query Analyser lo corre sin problemas.

Ya revise y hice correcciones en el tamaño de las columnas de la base y ya las estandarice todas. De hecho tengo dos ambientes, uno de desarrollo y uno de produccion, y en el primero corre sin ningun problema. Ya separe tambien el store y corri cada una de sus sentencias por separado, sin problemas.


¿Que puedo hacer? ¿Patear la PC??? ¿Alguien que se haya topado con este problema antes? La plataforma de SQL Server es 2000.
  #2 (permalink)  
Antiguo 01/04/2011, 19:36
 
Fecha de Ingreso: marzo-2011
Ubicación: Mexico
Mensajes: 11
Antigüedad: 13 años
Puntos: 0
Respuesta: Multiple-step OLE DB errors y SQL en un store procedure

He aqui el store procedure

Código:
He aqui el store procedure:
Código:
CREATE PROCEDURE Sp_ValidacionCargaBases (@nId_Base INT, @cNombreBase VARCHAR(300), @nId_Campana INT, @cBaseExistente VARCHAR(1), @cUsuario VARCHAR(100), @cNombreArchivo VARCHAR(400), @nId_Archivo INT) AS ---Inicializamos el contador de insert

SET nocount ON 

----Variables de manejo de base
DECLARE @cAccionBase 			VARCHAR(200)
DECLARE @nId_HistoricoDetalle 		INT 		
---Variables de declaracion de comandos
DECLARE @cComandoBase 			VARCHAR(8000) 
DECLARE @cComandoEnBase 			VARCHAR(8000) 
DECLARE @cComandoActualizaNoValidados 	VARCHAR(8000) 
DECLARE @cComandoInnombrable 		VARCHAR(8000) 

----Contadores de campos llave para insertar en el resumen de carga
DECLARE @nTotalRegistros 			INT ----Contador para el total de registros
DECLARE @nTotalRegistrosSubidos 		INT ----Contador para el total de registros subidos por base
DECLARE @nTotalRegistrosNoValidados 	INT ----Contador para el total de registros no validados (con bandera de validacion ----N----)
DECLARE @nRegistrosNoCargados 		INT ----Contador para los registros que no pasaron los filtros de carga con bandera ----S----
DECLARE @nCampoLlaveVacio 			INT ----Contador para los que traen campo llave vacios
DECLARE @nCamposLlaveEnBase 		INT ----Para los registros cuyo campo llave ya se encuentra en base
DECLARE @nCampoLlaveRepetidos 		INT ----Para los campos repetidos dentro de archivo
DECLARE @nCamposLlaveSinNombre 		INT ----Contadores para los parametros de nombre (Nombre1,Nombre2,Apellido Paterno,Materno)
DECLARE @nCamposLlaveSinApPat 		INT 
DECLARE @nCamposLlaveSinApMat 		INT 
DECLARE @nCamposLlaveInnombrable 		INT ----Contador para el nombre completo si esta en catalogo innombrables por nombre
DECLARE @nCamposLlaveInmarcable 		INT ----Contador para el telefono 1 completo si esta en catalogo inmarcables
DECLARE @nCamposLlaveSinTelefono1 	INT ----Contadores si el telefono viene vacio
DECLARE @nCamposLLaveTamanoTelefono1 	INT ----Contadores para el tamaño del telefono
DECLARE @nCamposLLaveErrorTelefono1 	INT ----Contadores si el telefono no es numerico


 ----Inicializamos los contadores
SET @nTotalRegistros 				=	0
SET @nTotalRegistrosSubidos 			=	0
SET @nTotalRegistrosNoValidados 		=	0
SET @nRegistrosNoCargados 			=	0
SET @nCampoLlaveVacio 			=	0
SET @nCamposLlaveEnBase 			=	0
SET @nCampoLlaveRepetidos 			=	0
SET @nCamposLlaveSinNombre 		=	0
SET @nCamposLlaveSinApPat 			=	0
SET @nCamposLlaveSinApMat 			=	0
SET @nCamposLlaveInnombrable 		=	0
SET @nCamposLlaveInmarcable 		=	0
SET @nCamposLlaveSinTelefono1 		=	0
SET @nCamposLLaveTamanoTelefono1 		=	0
SET @nCamposLLaveErrorTelefono1 		=	0 


----Paso 1:Hacemos insercion directa de los registros que tengan bandera 'N' de validar registro
SET @cComandoActualizaNoValidados = ' INSERT INTO ' + @cNombreBase
SET @cComandoActualizaNoValidados =@cComandoActualizaNoValidados + '(nId_Base, cColumnaValidacion, cCampoLlave, cTelefono1, cTelefono2, cTelefono3, cNombre1, cNombre2, cApPaterno, cApMaterno, cDomicilio, '
SET @cComandoActualizaNoValidados =@cComandoActualizaNoValidados + 'cNumExterior, cNumInterior, cColonia, cCP, cCiudad, cEstado, cMunipDel, cRFC, dFechaNacimiento, cEmail, cIDCliente, cAdicional1, cAdicional2, '
SET @cComandoActualizaNoValidados =@cComandoActualizaNoValidados + 'cAdicional3, cAdicional4, cAdicional5, cAdicional6, cAdicional7, cAdicional8, cAdicional9, cAdicional10, cUsuarioAlta, dFechaAlta)'
SET @cComandoActualizaNoValidados =@cComandoActualizaNoValidados + 'SELECT nId_Base, cColumnaValidacion, cCampoLlave, cTelefono1, cTelefono2, cTelefono3, cNombre1, cNombre2, cApPaterno, cApMaterno, cDomicilio, cNumExterior,'
SET @cComandoActualizaNoValidados =@cComandoActualizaNoValidados + 'cNumInterior, cColonia, cCP, cCiudad, cEstado, cMunipDel, cRFC, dFechaNacimiento, cEmail, cIDCliente, cAdicional1, cAdicional2, cAdicional3, '
SET @cComandoActualizaNoValidados =@cComandoActualizaNoValidados + 'cAdicional4, cAdicional5, cAdicional6, cAdicional7, cAdicional8, cAdicional9, cAdicional10, cUsuarioAlta, dFechaAlta '
SET @cComandoActualizaNoValidados = @cComandoActualizaNoValidados + 'FROM         tmpPreCargaArchivo '
SET @cComandoActualizaNoValidados = @cComandoActualizaNoValidados + 'WHERE cEstatus IS NULL AND nId_Base=' + CAST( @nId_Base AS VARCHAR) + ' AND nId_ArchivoBase=' + CAST(@nId_Archivo AS VARCHAR) + '  AND cColumnaValidacion=''N''' 
EXEC (@cComandoActualizaNoValidados) 
-----PRINT @cComandoActualizaNoValidados

----Actualizamos la bandera de los registros no validados
UPDATE tmpprecargaarchivo
SET cbanderanovalidados = 'S'
WHERE cestatus IS NULL
  AND nid_base = @nId_Base
AND cColumnaValidacion='N'
  AND nid_archivobase = @nId_Archivo 

-----Paso 2:Fijamos las banderas del store procedure para minimizar los registros a procesar
 -----Primera bandera: La validacion del campo llave
  UPDATE tmpprecargaarchivo
  SET cbanderacampollave = 'S' WHERE cestatus IS NULL
  AND nid_base = @nId_Base
AND cColumnaValidacion='S'
  AND nid_archivobase = @nId_Archivo
  AND (ccampollave IS NULL
       OR ccampollave = ''
       OR Len(ccampollave) = 0 OR ISNUMERIC(ccampollave)=0) 

----Una vez fijado si campo llave viene o no vacio, tomamos unicamente los campos que tengan campo llave
 ----y con esta condicion fijamos tambien las siguientes banderas
 ----Tenemos ahora la bandera de campo llave repetido
 ----Tomamos aquellos campos llave que se encuentran repetidos y actualizamos bandera
  UPDATE tmpprecargaarchivo
  SET cbanderarepetido = 'S' 
WHERE cestatus IS NULL
  AND nid_base = @nId_Base
AND cColumnaValidacion='S'
  AND nid_archivobase = @nId_Archivo
  AND cbanderacampollave IS NULL
  AND ccampollave IN
    (SELECT ccampollave
     FROM tmpprecargaarchivo
     WHERE cestatus IS NULL
       AND nid_base = @nId_Base
       AND cbanderacampollave IS NULL
     GROUP BY ccampollave HAVING COUNT(*) > 1) 


----Habilitamos las banderas de falta de datos si faltan los datos de nombre, o apellidos
----Bandera para campo de nombre
  UPDATE tmpprecargaarchivo
  SET cbanderanombre1 = 'S' 
WHERE cestatus IS NULL
 AND nid_base = @nId_Base
AND cColumnaValidacion='S'
  AND nid_archivobase = @nId_Archivo
  AND cbanderacampollave IS NULL
  AND ccampollave IN
    (SELECT ccampollave
     FROM tmpprecargaarchivo
     WHERE cestatus IS NULL
       AND nid_base = @nId_Base
       AND (cnombre1 IS NULL
            OR Ltrim(Rtrim(cnombre1)) = ''
            OR Len(cnombre1) = 0)) 

-----Bandera para campo de apellido paterno
  UPDATE tmpprecargaarchivo
  SET cbanderaappaterno = 'S' WHERE cestatus IS NULL
  AND nid_base = @nId_Base
AND cColumnaValidacion='S'
  AND nid_archivobase = @nId_Archivo
  AND cbanderacampollave IS NULL
  AND ccampollave IN
    (SELECT ccampollave
     FROM tmpprecargaarchivo
     WHERE cestatus IS NULL
       AND nid_base = @nId_Base
       AND (cappaterno IS NULL
            OR Ltrim(Rtrim(cappaterno)) = ''
            OR Len(cappaterno) = 0)) 

----Bandera para campo de apellido materno
  UPDATE tmpprecargaarchivo
  SET cbanderaapmaterno = 'S' WHERE cestatus IS NULL
  AND nid_base = @nId_Base
AND cColumnaValidacion='S'
  AND nid_archivobase = @nId_Archivo
  AND cbanderacampollave IS NULL
  AND ccampollave IN
    (SELECT ccampollave
     FROM tmpprecargaarchivo
     WHERE cestatus IS NULL
       AND nid_base = @nId_Base
       AND (capmaterno IS NULL
            OR Ltrim(Rtrim(capmaterno)) = ''
            OR Len(capmaterno) = 0)) 

----Habilitamos tambien la bandera de telefono si no cumple con los requisitos
---a)Sin Telefono
  UPDATE tmpprecargaarchivo
  SET cbanderatelefono = 'S' WHERE cestatus IS NULL
  AND nid_base = @nId_Base
AND cColumnaValidacion='S'
  AND nid_archivobase = @nId_Archivo
  AND cbanderacampollave IS NULL
  AND (ctelefono1 IS NULL
       OR Isnumeric(ctelefono1) <>1
       OR Len(ctelefono1) = 0
       OR Ltrim(Rtrim(ctelefono1)) = '') 


----b)Longitud Telefono
  UPDATE tmpprecargaarchivo
  SET cbanderatelefonolongitud = 'S' WHERE cestatus IS NULL
  AND nid_base = @nId_Base
AND cColumnaValidacion='S'
  AND nid_archivobase = @nId_Archivo
  AND cbanderacampollave IS NULL
  AND (ctelefono1 IS NOT NULL
       AND  Len(ctelefono1) < 10) 

----Error Telefono
  UPDATE tmpprecargaarchivo
  SET cbanderaerrortelefono = 'S' WHERE cestatus IS NULL
  AND nid_base = @nId_Base
AND cColumnaValidacion='S'
  AND nid_archivobase = @nId_Archivo
  AND cbanderacampollave IS NULL
  AND (ctelefono1 IS NOT NULL
       AND  IsNumeric(ctelefono1) <>1)
  #3 (permalink)  
Antiguo 01/04/2011, 19:38
 
Fecha de Ingreso: marzo-2011
Ubicación: Mexico
Mensajes: 11
Antigüedad: 13 años
Puntos: 0
Respuesta: Multiple-step OLE DB errors y SQL en un store procedure

La segunda parte del codigo para completar el store
Código:
---Paso 3:
 ----Realizamos la comparativa entre el nombre completo del innombrable y el nombre completo
  UPDATE tmpprecargaarchivo
  SET cbanderainnombrable = 'S' WHERE cestatus IS NULL
  AND nid_base = @nId_Base
AND cColumnaValidacion='S'
  AND nid_archivobase = @nId_Archivo
  AND cbanderacampollave IS NULL
  AND nid_precargaarchivo IN
    (SELECT tca.nid_precargaarchivo
     FROM catvip cv
     INNER JOIN tmpprecargaarchivo tca ON cv.cnombre = tca.cnombre1
     AND cv.cnombre2 = tca.cnombre2
     AND cv.cpaterno = tca.cappaterno
     AND cv.cmaterno = tca.capmaterno
     WHERE (tca.cestatus IS NULL)
       AND (tca.cbanderanombre1 IS NULL)
       AND (tca.cbanderaappaterno IS NULL )
       AND (tca.cbanderaapmaterno IS NULL )
       AND (cv.cestatus IS NULL)
       AND (tca.nid_base = @nId_Base)) 

----Despues del filtro de nombre completo, activamos tambien la bandera de innombrables para
 ----aquellos que cumplan con los filtros
 ----Primer filtro, nombre 1 contra la base de innombrables
  UPDATE tmpprecargaarchivo
  SET cbanderainnombrable = 'S' WHERE cestatus IS NULL
  AND nid_base = @nId_Base
AND cColumnaValidacion='S'
  AND nid_archivobase = @nId_Archivo
  AND cbanderacampollave IS NULL
  AND (cbanderanombre1 IS NULL)
  AND nid_precargaarchivo IN
    (SELECT tca.nid_precargaarchivo
     FROM catvip cv
     INNER JOIN tmpprecargaarchivo tca ON cv.cnombre = tca.cnombre1
     OR cv.cnombre2 = tca.cnombre1
     OR cv.cpaterno = tca.cnombre1
     OR cv.cmaterno = tca.cnombre1
     WHERE (tca.cestatus IS NULL)
       AND (tca.cbanderanombre1 IS NULL)
       AND (cv.cestatus IS NULL)
       AND (tca.nid_base = @nId_Base)) 

----Segunda comparativa: apellido paterno contra base de innombrables
  UPDATE tmpprecargaarchivo
  SET cbanderainnombrable = 'S' WHERE cestatus IS NULL
  AND nid_base = @nId_Base
AND cColumnaValidacion='S'
  AND nid_archivobase = @nId_Archivo
  AND cbanderacampollave IS NULL
  AND (cbanderaappaterno IS NULL)
  AND nid_precargaarchivo IN
    (SELECT tca.nid_precargaarchivo
     FROM catvip cv
     INNER JOIN tmpprecargaarchivo tca ON cv.cnombre = tca.cappaterno
     OR cv.cnombre2 = tca.cappaterno
     OR cv.cpaterno = tca.cappaterno
     OR cv.cmaterno = tca.cappaterno
     WHERE (tca.cestatus IS NULL)
       AND (tca.cbanderaappaterno IS NULL )
       AND (cv.cestatus IS NULL)
       AND (tca.nid_base = @nId_Base)) 

---Tercera Comparativa: apellido materno contra base de innombrables
  UPDATE tmpprecargaarchivo
  SET cbanderainnombrable = 'S' WHERE cestatus IS NULL
  AND nid_base = @nId_Base
AND cColumnaValidacion='S'
  AND nid_archivobase = @nId_Archivo
  AND cbanderacampollave IS NULL
  AND (cbanderaapmaterno IS NULL)
  AND nid_precargaarchivo IN
    (SELECT tca.nid_precargaarchivo
     FROM catvip cv
     INNER JOIN tmpprecargaarchivo tca ON cv.cnombre = tca.capmaterno
     OR cv.cnombre2 = tca.capmaterno
     OR cv.cpaterno = tca.capmaterno
     OR cv.cmaterno = tca.capmaterno
     WHERE (tca.cestatus IS NULL)
       AND (tca.cbanderaapmaterno IS NULL )
       AND (cv.cestatus IS NULL)
       AND (tca.nid_base = @nId_Base)) 

----Cuarta Comparativa:Telefono contra base de inmarcables
  UPDATE tmpprecargaarchivo
  SET cbanderainmarcable = 'S' WHERE cestatus IS NULL
  AND nid_base = @nId_Base
AND cColumnaValidacion='S'
  AND nid_archivobase = @nId_Archivo
  AND cbanderacampollave IS NULL
  AND cbanderatelefono IS NULL
  AND nid_precargaarchivo IN
    (SELECT tca.nid_precargaarchivo
     FROM catinmarcables cv
     INNER JOIN tmpprecargaarchivo tca ON cv.ctelefono = tca.ctelefono1
     WHERE (tca.cestatus IS NULL)
       AND (tca.cbanderatelefono IS NULL)
       AND (cv.cestatus IS NULL)
       AND (tca.nid_base = @nId_Base)) 

----Quinta comparativa : Ver si se encuentra en base el cliente cargado
SET @cComandoEnBase = 'UPDATE tmpPreCargaArchivo '
  SET @cComandoEnBase = @cComandoEnBase + ' SET cBanderaEnBase=''S'''
  SET @cComandoEnBase = @cComandoEnBase + '  WHERE cEstatus IS NULL AND nId_Base=' + CAST( @nId_Base AS VARCHAR)
  SET @cComandoEnBase = @cComandoEnBase + '  AND nId_ArchivoBase=' + CAST( @nId_Archivo AS VARCHAR)
  SET @cComandoEnBase = @cComandoEnBase + '    AND cbanderacampollave IS NULL AND cColumnaValidacion=''S'' '
  SET @cComandoEnBase = @cComandoEnBase + ' AND cCampoLlave IN (	SELECT CNB.cCampoLlave FROM ' + @cNombreBase + '  CNB '
  SET @cComandoEnBase = @cComandoEnBase + ' INNER JOIN tmpPreCargaArchivo TPC ON TPC.cCampoLlave=CNB.cCampoLLave '
  SET @cComandoEnBase = @cComandoEnBase + ' OR (TPC.cNombre1=CNB.cNombre1 AND TPC.cNombre2=CNB.cNombre2 AND TPC.cApPaterno=CNB.cApPaterno AND TPC.cApMaterno=CNB.cApMaterno) '
  SET @cComandoEnBase = @cComandoEnBase + ' WHERE CNB.cEstatus IS NULL '
  SET @cComandoEnBase = @cComandoEnBase + '	AND CNB.dFechaAlta BETWEEN (DATEADD(day,-90,GETDATE())) AND GETDATE() )' 
EXEC (@cComandoEnBase) 

---Paso 4: Habilitamos los conteos
 ---Conteo de total de registros
  SELECT @nTotalRegistros = COUNT(*)
  FROM tmpprecargaarchivo WHERE cestatus IS NULL
  AND nid_base = @nId_Base
  AND nid_archivobase = @nId_Archivo 

---Habilitamos el contador de los campos que no tienen campo llave
  SELECT @nCampoLlaveVacio = COUNT(*)
  FROM tmpprecargaarchivo WHERE cestatus IS NULL
  AND nid_base = @nId_Base
  AND nid_archivobase = @nId_Archivo
AND cColumnaValidacion='S'
  AND cbanderacampollave = 'S' 


----Realizamos el conteo de los campos repetidos
  SELECT @nCampoLlaveRepetidos = COUNT(*)
  FROM tmpprecargaarchivo WHERE cestatus IS NULL
  AND nid_base = @nId_Base
  AND nid_archivobase = @nId_Archivo
  AND cbanderacampollave IS NULL
AND cColumnaValidacion='S'
  AND cbanderarepetido = 'S' 

----Tomamos el total de registros subidos
  SELECT @nTotalRegistrosSubidos = COUNT(*)
  FROM tmpprecargaarchivo WHERE cestatus IS NULL
  AND nid_base = @nId_Base
  AND nid_archivobase = @nId_Archivo
  AND cbanderacampollave IS NULL
  AND (cbanderaenbase IS NULL
       AND cbanderacampollave IS NULL
       AND cbanderadatos IS NULL
       AND cbanderanombre1 IS NULL
       AND cbanderaappaterno IS NULL
       AND cbanderaapmaterno IS NULL
       AND cbanderatelefono IS NULL
      AND  cbanderatelefonolongitud IS NULL
     AND cbanderaerrortelefono IS NULL
       AND cbanderainnombrable IS NULL
       AND cbanderainmarcable IS NULL
       AND cbanderarepetido IS NULL) 

----Conteo de los registros no cargados
  SELECT @nRegistrosNoCargados = COUNT(*)
  FROM tmpprecargaarchivo WHERE cestatus IS NULL
  AND nid_base = @nId_Base
  AND nid_archivobase = @nId_Archivo
  AND cColumnaValidacion='S'
  AND cbanderacampollave IS NULL
  AND (cbanderaenbase = 'S'
       OR cbanderacampollave = 'S'
       OR cbanderanovalidados = 'S'
       OR cbanderadatos = 'S'
       OR cbanderanombre1 = 'S'
       OR cbanderaappaterno = 'S'
       OR cbanderaapmaterno = 'S'
       OR cbanderatelefono = 'S'
       OR cbanderatelefonolongitud='S'
       OR cbanderaerrortelefono='S'
       OR cbanderainnombrable = 'S'
       OR cbanderainmarcable = 'S'
       OR cbanderarepetido = 'S') 

----Realizamos el conteo de esos registros no validados
  SELECT @nTotalRegistrosNoValidados = COUNT(*)
  FROM tmpprecargaarchivo WHERE cestatus IS NULL
  AND nid_base = @nId_Base
  AND nid_archivobase = @nId_Archivo
  AND ccolumnavalidacion = 'N' 

----Conteo Sin Nombre
  SELECT @nCamposLlaveSinNombre = COUNT(*)
  FROM tmpprecargaarchivo WHERE cestatus IS NULL
  AND nid_base = @nId_Base
  AND nid_archivobase = @nId_Archivo
AND cColumnaValidacion='S'
  AND cbanderacampollave IS NULL
  AND (cbanderanombre1 = 'S') 

----Conteo Sin Apellido Paterno
  SELECT @nCamposLlaveSinApPat = COUNT(*)
  FROM tmpprecargaarchivo WHERE cestatus IS NULL
  AND nid_base = @nId_Base
  AND nid_archivobase = @nId_Archivo
AND cColumnaValidacion='S'
  AND cbanderacampollave IS NULL
  AND (cbanderaappaterno = 'S') 

----Conteo Sin Apellido Materno
  SELECT @nCamposLlaveSinApMat = COUNT(*)
  FROM tmpprecargaarchivo WHERE cestatus IS NULL
  AND nid_base = @nId_Base
  AND nid_archivobase = @nId_Archivo
AND cColumnaValidacion='S'
  AND cbanderacampollave IS NULL
  AND (cbanderaapmaterno = 'S')
  #4 (permalink)  
Antiguo 01/04/2011, 19:38
 
Fecha de Ingreso: marzo-2011
Ubicación: Mexico
Mensajes: 11
Antigüedad: 13 años
Puntos: 0
Respuesta: Multiple-step OLE DB errors y SQL en un store procedure

La ultima parte del store:
Código:
----Conteo de los que son clientes innombrables
  SELECT @nCamposLlaveInnombrable = COUNT(*)
  FROM tmpprecargaarchivo WHERE cestatus IS NULL
  AND nid_base = @nId_Base
  AND nid_archivobase = @nId_Archivo
AND cColumnaValidacion='S'
  AND cbanderacampollave IS NULL
  AND cbanderainnombrable = 'S' 

----Conteo Sin Telefono
  SELECT @nCamposLlaveSinTelefono1 = COUNT(*)
  FROM tmpprecargaarchivo WHERE cestatus IS NULL
  AND nid_base = @nId_Base
  AND nid_archivobase = @nId_Archivo
AND cColumnaValidacion='S'
  AND cbanderacampollave IS NULL
  AND (ctelefono1 IS NULL
       OR Ltrim(Rtrim(ctelefono1)) = ''
       OR Len(ctelefono1) = 0) 

----Conteo Longitud Telefono
  SELECT @nCamposLLaveTamanoTelefono1 = COUNT(*)
  FROM tmpprecargaarchivo WHERE cestatus IS NULL
  AND nid_base = @nId_Base
  AND nid_archivobase = @nId_Archivo
AND cColumnaValidacion='S'
  AND cbanderacampollave IS NULL
  AND (Len (ctelefono1) > 0
       AND Len(ctelefono1) < 10) 

----Conteo Campo Error Telefono
  SELECT @nCamposLLaveErrorTelefono1 = COUNT(*)
  FROM tmpprecargaarchivo WHERE cestatus IS NULL
  AND nid_base = @nId_Base
  AND nid_archivobase = @nId_Archivo
AND cColumnaValidacion='S'
  AND cbanderacampollave IS NULL
  AND (Isnumeric(ctelefono1) = 0) 

----Conteo cliente inmarcable
  SELECT @nCamposLlaveInmarcable = COUNT(*)
  FROM tmpprecargaarchivo WHERE cestatus IS NULL
  AND nid_base = @nId_Base
  AND nid_archivobase = @nId_Archivo
 AND cColumnaValidacion='S'
  AND cbanderainmarcable = 'S' 


---Paso 5: Una vez teniendo los contadores activos, actualizamos las tablas de tmpRegistrosNoCargados
  INSERT INTO tmpregistrosnocargados (nid_base, nId_ArchivoBase,ccolumnavalidacion, ccampollave, ctelefono1, ctelefono2, ctelefono3, cnombre1, cnombre2, cappaterno, capmaterno, cdomicilio, cnumexterior, cnuminterior, ccolonia, ccp, cciudad, cestado, cmunipdel, crfc, dfechanacimiento, cemail, cidcliente, cadicional1, cadicional2, cadicional3, cadicional4, cadicional5, cadicional6, cadicional7, cadicional8, cadicional9, cadicional10, cusuarioalta, dfechaalta)
  SELECT nid_base,nId_ArchivoBase, ccolumnavalidacion, ccampollave, ctelefono1, ctelefono2, ctelefono3, cnombre1, cnombre2, cappaterno, capmaterno, cdomicilio, cnumexterior, cnuminterior, ccolonia, ccp, cciudad, cestado, cmunipdel, crfc, dfechanacimiento, cemail, cidcliente, cadicional1, cadicional2, cadicional3, cadicional4, cadicional5, cadicional6, cadicional7, cadicional8, cadicional9, cadicional10, cusuarioalta, dfechaalta
  FROM tmpprecargaarchivo WHERE cestatus IS NULL
  AND nid_base = @nId_Base
  AND nid_archivobase = @nId_Archivo
 AND cColumnaValidacion='S'
  AND cbanderacampollave IS NULL
  AND (cbanderaenbase = 'S'
       OR cbanderacampollave = 'S'
       OR cbanderanovalidados = 'S'
       OR cbanderadatos = 'S'
       OR cbanderanombre1 = 'S'
       OR cbanderaappaterno = 'S'
       OR cbanderaapmaterno = 'S'
       OR cbanderatelefono = 'S'
       OR cbanderaerrortelefono='S'
       OR cbanderatelefonolongitud='S'
       OR cbanderainnombrable = 'S'
       OR cbanderainmarcable = 'S'
       OR cbanderarepetido = 'S') 

----Y despues actualizamos la tabla destino con los registros que cumplan los requerimientos
SET @cComandoBase = ' INSERT INTO ' + @cNombreBase
  SET @cComandoBase =@cComandoBase + ' (nId_Base, cColumnaValidacion, cCampoLlave, cTelefono1, cTelefono2, cTelefono3, cNombre1, cNombre2, cApPaterno, cApMaterno, cDomicilio, '
  SET @cComandoBase =@cComandoBase + ' cNumExterior, cNumInterior, cColonia, cCP, cCiudad, cEstado, cMunipDel, cRFC, dFechaNacimiento, cEmail, cIDCliente, cAdicional1, cAdicional2, '
  SET @cComandoBase =@cComandoBase + ' cAdicional3, cAdicional4, cAdicional5, cAdicional6, cAdicional7, cAdicional8, cAdicional9, cAdicional10, cUsuarioAlta, dFechaAlta)'
  SET @cComandoBase =@cComandoBase + ' SELECT nId_Base,cColumnaValidacion, cCampoLlave, cTelefono1, cTelefono2, cTelefono3, cNombre1, cNombre2, cApPaterno, cApMaterno, cDomicilio, cNumExterior,'
  SET @cComandoBase =@cComandoBase + ' cNumInterior, cColonia, cCP, cCiudad, cEstado, cMunipDel, cRFC, dFechaNacimiento, cEmail, cIDCliente, cAdicional1, cAdicional2, cAdicional3, '
  SET @cComandoBase =@cComandoBase + ' cAdicional4, cAdicional5, cAdicional6, cAdicional7, cAdicional8, cAdicional9, cAdicional10, cUsuarioAlta, dFechaAlta '
  SET @cComandoBase =@cComandoBase + ' FROM  tmpPreCargaArchivo '
  SET @cComandoBase =@cComandoBase + ' WHERE cEstatus IS NULL AND nId_Base=' + CAST( @nId_Base AS VARCHAR)
  SET @cComandoBase = @cComandoBase +' AND cColumnaValidacion=''S''  AND cbanderacampollave IS NULL AND nId_ArchivoBase=' + CAST( @nId_Archivo AS VARCHAR)
  SET @cComandoBase = @cComandoBase + ' AND ( cBanderaEnBase IS NULL AND  cBanderaCampoLlave IS NULL AND cBanderaNoValidados IS NULL'
  SET @cComandoBase = @cComandoBase + ' AND cBanderaDatos IS NULL AND cBanderaNombre1 IS NULL AND cBanderaApPaterno IS NULL '
  SET @cComandoBase = @cComandoBase + '  AND cBanderaApMaterno IS NULL AND cBanderaTelefono IS NULL AND cBanderaErrorTelefono IS NULL AND cBanderaTelefonoLongitud IS NULL  AND cBanderaInnombrable IS NULL '
  SET @cComandoBase =@cComandoBase + ' AND cBanderaInmarcable IS NULL AND cBanderaRepetido IS NULL )' 
EXEC(@cComandoBase) 
----PRINT @cComandoBase 


-----Si se selecciona la opcion de base existente, se realiza la condicion
IF @cBaseExistente = 'S' 
BEGIN
  INSERT INTO tblhistoricobase (nid_base, caccion, cusuario, dalta)
  VALUES (@nId_Base, 'ACTUALIZACION DE BASE (' + CAST( @nTotalRegistrosSubidos AS VARCHAR ) + ')', @cUsuario + '', Getdate())
  SET @cAccionBase = 'ACTUALIZACION DE BASE (' + CAST( @nTotalRegistrosSubidos AS VARCHAR) + ')'


  UPDATE tblbasescompletas
  SET cusuarioultimaact = CAST(@cUsuario AS VARCHAR) ,
ntotalregistros = ntotalregistros + @nTotalRegistrosSubidos,
 dfechaultimaact = Getdate() WHERE cestatus IS NULL
  AND nid_campana = @nId_Campana
  AND nid_base = @nId_Base 
END 
ELSE 
BEGIN
  SET @cAccionBase = 'ALTA DE BASE (' + CAST(@nTotalRegistrosSubidos AS VARCHAR) + ')' ----Insertamos actualizacion en la tabla de bases completas

  UPDATE tblbasescompletas
  SET ntotalregistros = @nTotalRegistrosSubidos WHERE cestatus IS NULL
  AND nid_campana = @nId_Campana
  AND nid_base = @nId_Base 
END 

----Insertamos los contadores en la tabla de registros
  INSERT INTO tblhistoricobasedetalle (nid_campana, nid_base, cnombrearchivo, cnombrebase, caccion, ntotalregistros, ntotalregistrossubidos, ntotalregistrosnovalidados, ntotalregistrosnocargados, ncampollavevacio, ncampollaverepetidos, ncamposllaveenbase, ncamposllavesinnombre, ncamposllavesinappat, ncamposllavesinapmat, ncamposllaveinnombrable, ncamposllavesintelefono1, ncamposllavetamanotelefono1, ncamposllaveerrortelefono1, cusuarioalta, dfechaalta)
  VALUES (@nId_Campana, @nId_Base, @cNombreArchivo, @cNombreBase, @cAccionBase, @nTotalRegistros, @nTotalRegistrosSubidos, @nTotalRegistrosNoValidados, @nRegistrosNoCargados, @nCampoLlaveVacio, @nCampoLlaveRepetidos, @nCamposLlaveEnBase, @nCamposLlaveSinNombre, @nCamposLlaveSinApPat, @nCamposLlaveSinApMat, @nCamposLlaveInnombrable, @nCamposLlaveSinTelefono1, @nCamposLlaveTamanoTelefono1, @nCamposLlaveErrorTelefono1, @cUsuario, Getdate()) ---Y por ultimo tomamos el id del historico para mostrar el detalle

  SELECT @nId_HistoricoDetalle = MAX(nid_historicobasedetalle)
  FROM tblhistoricobasedetalle WHERE cestatus IS NULL
  AND nid_campana = @nId_Campana
  AND nid_base = @nId_Base

  AND cnombrearchivo = @cNombreArchivo
  AND cnombrebase = @cNombreBase 

----Y tomamos el id para sacar los contadores
  SELECT @nId_HistoricoDetalle AS nId_HistoricoBaseDetalle
GO

Etiquetas: procedure, sql, store
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:42.