01/04/2011, 19:36
|
| | Fecha de Ingreso: marzo-2011 Ubicación: Mexico
Mensajes: 11
Antigüedad: 13 años, 9 meses 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)
|