Ver Mensaje Individual
  #4 (permalink)  
Antiguo 01/04/2011, 19:38
Blade1982
 
Fecha de Ingreso: marzo-2011
Ubicación: Mexico
Mensajes: 11
Antigüedad: 13 años, 1 mes
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