Problema con un Store Procedure
Publicado por Cristian (2 intervenciones) el 20/03/2007 16:09:12
Hola amigos, estoy realizando un programa en VB, con el gestor SQL y requiero enviar datos desde una maquina cliente, procesarlos en un servidor, y regresarme el resultado... sin embargo no entiendo porque no me regresa lo esperado... es decir como que al crecer el store procedure las cosas ya no funcionan aunque creo que las instrucciones estan correctas, no marca errores, sin embargo tampoco recibo lo que deseo como respuesta... el Store Procedure es el siguiente:
CREATE PROCEDURE sp_VERIFICA_NOMBRE_TABLA @Disyuntiva smallint, @Folio varchar(50), @Id_BDatos smallint, @Id_Usuarios smallint, @Validador int OutPut, @Cant_FLeidos bigint OutPut, @Id_Folios bigint OutPut, @Esp smallint OutPut, @Id_Caja_Paquete int OutPut, @Nume_Paquete bigint OutPut, @Nume_Caja smallint OutPut
AS
DECLARE @Verificador smallint
DECLARE @Fecha_Hora smalldatetime
SET @Fecha_Hora = GetDate()
IF @Disyuntiva = 0
BEGIN
SET @Verificador = (SELECT Verificador FROM FOLIOS_Nombre_Tabla WHERE Id_Folios = @Id_Folios)
IF @Verificador = 0
BEGIN
UPDATE FOLIOS_NOMBRE_TABLA SET Verificador = 1, FHora_Folio = @Fecha_Hora, Id_Usuarios = @Id_Usuarios WHERE Id_Folios = @Id_Folios
SET @Esp = (SELECT Esp FROM FOLIOS_NOMBRE_TABLA WHERE Id_Folios = @Id_Folios)
UPDATE BASE_DATOS SET Cant_FLeidos = (Cant_FLeidos + 1), Id_Ultimo_Folio_Leido = @Id_Folios WHERE Id_BDatos = @Id_BDatos
SET @Cant_FLeidos = @Cant_FLeidos + 1
SET @Validador = 0-- El Folio no había sido leído antes.
END
ELSE
BEGIN
IF @Verificador = 1
BEGIN
SET @Validador = 1 -- El Folio esta duplicado
END
ELSE
BEGIN
IF @Verificador = 2
BEGIN
SET @Validador = 2 -- El Folio es una reposición
END
END
END
END
ELSE
BEGIN
SET @Id_Folios = isNull((SELECT Id_Folios FROM FOLIOS_NOMBRE_TABLA WHERE Folio LIKE @Folio), -1)
IF @Id_Folios <> -1
BEGIN
SET @Id_Caja_Paquete = (SELECT Id_Caja_Paquete FROM CAJAS_PAQUETES_Nombre_Tabla WHERE Foli_IPaquete <= @Id_Folios AND Foli_FPaquete >= @Id_Folios)
SET @Nume_Paquete = (SELECT Nume_Paquete FROM CAJAS_PAQUETES_Nombre_Tabla WHERE Id_Caja_Paquete = @Id_Caja_Paquete)
SET @Nume_Caja = (SELECT Nume_Caja FROM CAJAS_PAQUETES_Nombre_Tabla WHERE Id_Caja_Paquete = @Id_Caja_Paquete)
SET @Verificador = (SELECT Verificador FROM FOLIOS_Nombre_Tabla WHERE Id_Folios = @Id_Folios)
IF @Verificador = 0
BEGIN
UPDATE FOLIOS_NOMBRE_TABLA SET Verificador = 1, FHora_Folio = @Fecha_Hora, Id_Usuarios = @Id_Usuarios WHERE Id_Folios = @Id_Folios
UPDATE BASE_DATOS SET Id_Ultimo_Folio_Leido = @Id_Folios WHERE Id_BDatos = @Id_BDatos
SET @Validador = 0 -- El Folio no había sido leído antes.
SET @Esp = (SELECT Esp FROM FOLIOS_NOMBRE_TABLA WHERE Id_Folios = @Id_Folios)
SET @Cant_FLeidos = isNull((SELECT Cant_FLeidos FROM BASE_DATOS WHERE Id_BDatos = @Id_BDatos),-1)
IF @Cant_FLeidos <> -1
BEGIN
UPDATE BASE_DATOS SET Cant_FLeidos = (Cant_FLeidos + 1) WHERE Id_BDatos = @Id_BDatos
SET @Cant_FLeidos = @Cant_FLeidos + 1
END
ELSE
BEGIN
SET @Cant_FLeidos = (SELECT COUNT(*) FROM FOLIOS_NOMBRE_TABLA WHERE Verificador = 1)
UPDATE BASE_DATOS SET Cant_FLeidos = @Cant_FLeidos WHERE Id_BDatos = @Id_BDatos
SET @Validador = -3 -- El Validador para Cant_FLeidos se ha actualizado
END
END
ELSE
BEGIN
IF @Verificador = 1
BEGIN
SET @Validador = 1 -- El Folio esta duplicado
END
ELSE
BEGIN
IF @Verificador = 2
BEGIN
SET @Validador = 2 -- El Folio es una reposición
END
END
END
END
ELSE
BEGIN
SET @Validador = -1 --El Folio no existe en la Base de Datos o es Nulo
END
END
donde "NOMBRE_TABLA" es un dato variable que cambia deacuerdo al nombre de la tabla, siempre que aparezca debe ser modificado por el nombre de la tabla correspondiente.
Estoy utilizando varias tablas, BASE_DATOS, que contiene los nombres y algunas características de cada base de datos, CONFIGURACION_JOB que es una tabla para configurar el trabajo actual con el que estoy trabajando, y la tabla FOLIOS_NOMBRE_BASE DATOS que es la que me almacena una numero con una cantidad de folios de arriba de un millon, en la que tengo una variable "verificador" que me indica si ya fue leido dicho folio desde un lector de código de barras.
Desde ahoritq gracias por su apoyo.
CREATE PROCEDURE sp_VERIFICA_NOMBRE_TABLA @Disyuntiva smallint, @Folio varchar(50), @Id_BDatos smallint, @Id_Usuarios smallint, @Validador int OutPut, @Cant_FLeidos bigint OutPut, @Id_Folios bigint OutPut, @Esp smallint OutPut, @Id_Caja_Paquete int OutPut, @Nume_Paquete bigint OutPut, @Nume_Caja smallint OutPut
AS
DECLARE @Verificador smallint
DECLARE @Fecha_Hora smalldatetime
SET @Fecha_Hora = GetDate()
IF @Disyuntiva = 0
BEGIN
SET @Verificador = (SELECT Verificador FROM FOLIOS_Nombre_Tabla WHERE Id_Folios = @Id_Folios)
IF @Verificador = 0
BEGIN
UPDATE FOLIOS_NOMBRE_TABLA SET Verificador = 1, FHora_Folio = @Fecha_Hora, Id_Usuarios = @Id_Usuarios WHERE Id_Folios = @Id_Folios
SET @Esp = (SELECT Esp FROM FOLIOS_NOMBRE_TABLA WHERE Id_Folios = @Id_Folios)
UPDATE BASE_DATOS SET Cant_FLeidos = (Cant_FLeidos + 1), Id_Ultimo_Folio_Leido = @Id_Folios WHERE Id_BDatos = @Id_BDatos
SET @Cant_FLeidos = @Cant_FLeidos + 1
SET @Validador = 0-- El Folio no había sido leído antes.
END
ELSE
BEGIN
IF @Verificador = 1
BEGIN
SET @Validador = 1 -- El Folio esta duplicado
END
ELSE
BEGIN
IF @Verificador = 2
BEGIN
SET @Validador = 2 -- El Folio es una reposición
END
END
END
END
ELSE
BEGIN
SET @Id_Folios = isNull((SELECT Id_Folios FROM FOLIOS_NOMBRE_TABLA WHERE Folio LIKE @Folio), -1)
IF @Id_Folios <> -1
BEGIN
SET @Id_Caja_Paquete = (SELECT Id_Caja_Paquete FROM CAJAS_PAQUETES_Nombre_Tabla WHERE Foli_IPaquete <= @Id_Folios AND Foli_FPaquete >= @Id_Folios)
SET @Nume_Paquete = (SELECT Nume_Paquete FROM CAJAS_PAQUETES_Nombre_Tabla WHERE Id_Caja_Paquete = @Id_Caja_Paquete)
SET @Nume_Caja = (SELECT Nume_Caja FROM CAJAS_PAQUETES_Nombre_Tabla WHERE Id_Caja_Paquete = @Id_Caja_Paquete)
SET @Verificador = (SELECT Verificador FROM FOLIOS_Nombre_Tabla WHERE Id_Folios = @Id_Folios)
IF @Verificador = 0
BEGIN
UPDATE FOLIOS_NOMBRE_TABLA SET Verificador = 1, FHora_Folio = @Fecha_Hora, Id_Usuarios = @Id_Usuarios WHERE Id_Folios = @Id_Folios
UPDATE BASE_DATOS SET Id_Ultimo_Folio_Leido = @Id_Folios WHERE Id_BDatos = @Id_BDatos
SET @Validador = 0 -- El Folio no había sido leído antes.
SET @Esp = (SELECT Esp FROM FOLIOS_NOMBRE_TABLA WHERE Id_Folios = @Id_Folios)
SET @Cant_FLeidos = isNull((SELECT Cant_FLeidos FROM BASE_DATOS WHERE Id_BDatos = @Id_BDatos),-1)
IF @Cant_FLeidos <> -1
BEGIN
UPDATE BASE_DATOS SET Cant_FLeidos = (Cant_FLeidos + 1) WHERE Id_BDatos = @Id_BDatos
SET @Cant_FLeidos = @Cant_FLeidos + 1
END
ELSE
BEGIN
SET @Cant_FLeidos = (SELECT COUNT(*) FROM FOLIOS_NOMBRE_TABLA WHERE Verificador = 1)
UPDATE BASE_DATOS SET Cant_FLeidos = @Cant_FLeidos WHERE Id_BDatos = @Id_BDatos
SET @Validador = -3 -- El Validador para Cant_FLeidos se ha actualizado
END
END
ELSE
BEGIN
IF @Verificador = 1
BEGIN
SET @Validador = 1 -- El Folio esta duplicado
END
ELSE
BEGIN
IF @Verificador = 2
BEGIN
SET @Validador = 2 -- El Folio es una reposición
END
END
END
END
ELSE
BEGIN
SET @Validador = -1 --El Folio no existe en la Base de Datos o es Nulo
END
END
donde "NOMBRE_TABLA" es un dato variable que cambia deacuerdo al nombre de la tabla, siempre que aparezca debe ser modificado por el nombre de la tabla correspondiente.
Estoy utilizando varias tablas, BASE_DATOS, que contiene los nombres y algunas características de cada base de datos, CONFIGURACION_JOB que es una tabla para configurar el trabajo actual con el que estoy trabajando, y la tabla FOLIOS_NOMBRE_BASE DATOS que es la que me almacena una numero con una cantidad de folios de arriba de un millon, en la que tengo una variable "verificador" que me indica si ya fue leido dicho folio desde un lector de código de barras.
Desde ahoritq gracias por su apoyo.
Valora esta pregunta


0