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

Crear StoreProcedure insert

Estas en el tema de Crear StoreProcedure insert en el foro de Bases de Datos General en Foros del Web. Enviarme una alerta | Editar | Cambio de tipo Question No puede votar su propia entrada 0 Buenas tardes a todos. Los molesto ya que ...
  #1 (permalink)  
Antiguo 06/04/2016, 14:04
 
Fecha de Ingreso: febrero-2012
Ubicación: UY
Mensajes: 10
Antigüedad: 12 años, 3 meses
Puntos: 0
Crear StoreProcedure insert

Enviarme una alerta | Editar | Cambio de tipo
Question
No puede votar su propia entrada
0
Buenas tardes a todos.

Los molesto ya que tengo una duda a la hora de hacer un insert con un storeprocedure.

Tengo una tabla llamada Categoria cuál tiene 3 campos:

"idCategoria" (Primary Key, identity)

"Nombre" (varchar, no nulls)

"DescripcionCorta" (varchar, no nulls, unique constraint)

El campo "DescripcionCorta" consiste de una abreviación de 3 letras del campo Nombre, cuál debe ser ingresado por el usuario desde el formulario de alta.

Por ej:
Nombre: Monitor
DescripcionCorta: MTR

Quiero crear un SP dónde a la hora de insertar un nuevo registro, verifique que "Nombre" como "DescripcionCorta" no existan mostrando un valor de salida, para poder identificarlo en visual studio y devolver al usuario el mensaje correspondiente.

Por ejemplo:

Valor=0 (Datos ingresados correctamente)
Valor=1 (Nombre ya existe)
Valor=2 (DescripcionCorta ya existe)

Espero me pueda ayudar y muchas gracias por su ayuda.
  #2 (permalink)  
Antiguo 06/04/2016, 14:13
 
Fecha de Ingreso: marzo-2016
Mensajes: 13
Antigüedad: 8 años, 1 mes
Puntos: 0
Respuesta: Crear StoreProcedure insert

Porque no haces un Select desde la aplicacion que estas desarrollando, si te regresa un valor mandas el mensaje al usuario, y si no aparece insertas el valor en la tabla tranquilamente
  #3 (permalink)  
Antiguo 06/04/2016, 14:14
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Crear StoreProcedure insert

Me imagino que no lo hace como mencionas JCezar93 porque esta haciendo un insert y quiere validar que los valores no esten duplicados, ahora en ningun momento que manejador de bases de datos estas usando
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #4 (permalink)  
Antiguo 06/04/2016, 14:30
 
Fecha de Ingreso: marzo-2016
Mensajes: 13
Antigüedad: 8 años, 1 mes
Puntos: 0
Respuesta: Crear StoreProcedure insert

Cita:
Iniciado por Libras Ver Mensaje
Me imagino que no lo hace como mencionas JCezar93 porque esta haciendo un insert y quiere validar que los valores no esten duplicados, ahora en ningun momento que manejador de bases de datos estas usando
Por eso mismo, yo propongo que primero los busque, si los encuentra que no realice el insert hasta que cambie los valores, asi se garantiza que no haya repetidos
  #5 (permalink)  
Antiguo 06/04/2016, 14:35
 
Fecha de Ingreso: febrero-2012
Ubicación: UY
Mensajes: 10
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: Crear StoreProcedure insert

Gracias a ambos por la respuesta!

Estoy utilizando como db SQL 2012 y asp.net.

Pense en hacer lo que dice JCezar93, pero preferí subir un nivel y hacer que el SQL haga su trabajo, pero al ser simplemente 2 registros, creo que lo más fácil es hacer un Select.

De todos modos, si hay alguien que se anima a tirarme unas lineas de como hacerlo directamente en SQL retornando el valor, sería genial.

Muchas gracias!!!
  #6 (permalink)  
Antiguo 06/04/2016, 15:02
 
Fecha de Ingreso: marzo-2016
Mensajes: 13
Antigüedad: 8 años, 1 mes
Puntos: 0
Respuesta: Crear StoreProcedure insert

Código:
CREATE PROCEDURE spStoredDePrueba
    @ID AS INT,
    @Valor AS INT
AS
BEGIN
    DECLARE @resultado BIT
IF EXISTS(SELECT ID FROM TABLA WHERE ID = @ID)	
        BEGIN
            INSERT INTO TABLA (Campo1,ID) VALUES (@Valor,@ID)
            SET @resultado = 1
	END
ELSE
	BEGIN
            SET @resultado = 0
	END
        RETURN (@resultado)
END
Algo asi te puede servir, y en tu aplicacion si recibe un 0 le avisas al usuario que tiene que cambiar los valores
  #7 (permalink)  
Antiguo 06/04/2016, 15:27
 
Fecha de Ingreso: febrero-2012
Ubicación: UY
Mensajes: 10
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: Crear StoreProcedure insert

Cita:
Iniciado por JCezar93 Ver Mensaje
Código:
CREATE PROCEDURE spStoredDePrueba
    @ID AS INT,
    @Valor AS INT
AS
BEGIN
    DECLARE @resultado BIT
IF EXISTS(SELECT ID FROM TABLA WHERE ID = @ID)	
        BEGIN
            INSERT INTO TABLA (Campo1,ID) VALUES (@Valor,@ID)
            SET @resultado = 1
	END
ELSE
	BEGIN
            SET @resultado = 0
	END
        RETURN (@resultado)
END
Algo asi te puede servir, y en tu aplicacion si recibe un 0 le avisas al usuario que tiene que cambiar los valores
Exactamente es el query que estoy utilizando en este momento, pero tiene la limitación de que solo puedo chequear un solo valor, si existe devuelve 0, si no existe devuelve 1 e inserta los valores.

El problema es que necesito validar 2 campos, o sea que debería tener 3 retornos para identificar que registro es el que ya existe en la tabla.

Tal vez por código en la app me va mejor, pero no me doy cuenta cómo hacerlo, si me podes tirar unas lineas te estaré agradecido.

Abrazo y gracias por la preocupación.
  #8 (permalink)  
Antiguo 06/04/2016, 15:34
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Crear StoreProcedure insert

Entonces no regreses un valor entero, regresa el nombre del campo, o si vas a regresar 3 valores regresalos en una cadena separada por "|", o en su defecto maneja una funcion que regrese los 3 valores en lugar de un procedure :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Última edición por Libras; 06/04/2016 a las 15:39

Etiquetas: insert, tabla
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 22:35.