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

Store Procedure con la funcion Return

Estas en el tema de Store Procedure con la funcion Return en el foro de SQL Server en Foros del Web. Buen día, mi pregunta es: Como modificar el siguiente SP para utilizar Return y enviar mensajes que manda el siguiente SP: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: ...
  #1 (permalink)  
Antiguo 13/02/2013, 10:54
 
Fecha de Ingreso: enero-2013
Mensajes: 93
Antigüedad: 11 años, 3 meses
Puntos: 0
Pregunta Store Procedure con la funcion Return

Buen día, mi pregunta es:

Como modificar el siguiente SP para utilizar Return y enviar mensajes que manda el siguiente SP:

Código SQL:
Ver original
  1. (@id INT)
  2. AS
  3. DELETE FROM  T_Competencia
  4. WHERE ID=@id AND ID  NOT IN (SELECT DISTINCT id_competencia FROM gruporelacion)
  5.  
  6. IF @@rowcount > 0
  7. BEGIN
  8. SELECT 'Registro borrado'=@id
  9. END
  10. ELSE
  11. print 'No se pudo eliminar el registro'

Quiero a aprender a usar el return para quitar los print.

Gracias por su tiempo!
  #2 (permalink)  
Antiguo 13/02/2013, 11:04
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Store Procedure con la funcion Return

Un mensaje se puede enviar a la capa cliente con un simple SELECT, el PRINT, no te sirve.
__________________
MCTS Isaias Islas
  #3 (permalink)  
Antiguo 13/02/2013, 11:08
 
Fecha de Ingreso: enero-2013
Mensajes: 93
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Store Procedure con la funcion Return

Bueno, en si mi duda como es utilizar el Return, ya que quiero que quiero por decir en el siguiente sp:

ALTER procedure [dbo].[hola_mundo]
(@id int)
as
delete from T_Competencia
where ID=@id and ID not in (select distinct id_competencia from gruporelacion)

if @@rowcount > 0

a partir de aqui empezar a utilizar el Return
Donde le indique:
a) Cantidad de renglones afectados
b)Si se borro o no el registro ya que primero comparo si el ID no se encuentra registrado en 2 tablas.

La verdad nunca e utilizado un return, soy novato en SQL, gracias compañero!
  #4 (permalink)  
Antiguo 13/02/2013, 11:32
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: Store Procedure con la funcion Return

no es return es output....

http://www.forosdelweb.com/f87/conta...alida-1036382/
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 13/02/2013, 11:54
 
Fecha de Ingreso: enero-2013
Mensajes: 93
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Store Procedure con la funcion Return

Lo que sucede es que ya tengo en un SP lo que me piden que es el primero que puse, sin embargo me dice mi jefe directo que ahora haga un Store Procedure utilizando el Return para mandar mensajes de advertencia o errores cuando se borre un registro o no.

Saludos!
  #6 (permalink)  
Antiguo 13/02/2013, 12:44
 
Fecha de Ingreso: enero-2013
Mensajes: 93
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Store Procedure con la funcion Return

o bien mostrar el ID en el siguiente select:

select 'Mensaje'='La tienda no existe' <--- y Aqui poner la variable ID como seria?
  #7 (permalink)  
Antiguo 13/02/2013, 12:46
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Store Procedure con la funcion Return

SELECT 'La tienda no existe' + @Tuvariable
__________________
MCTS Isaias Islas
  #8 (permalink)  
Antiguo 13/02/2013, 12:52
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: Store Procedure con la funcion Return

y porque no te sirve con output?
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #9 (permalink)  
Antiguo 13/02/2013, 13:09
 
Fecha de Ingreso: enero-2013
Mensajes: 93
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Store Procedure con la funcion Return

Gracias creo que ya pude :) solo me falta un detalle les comento, asi quedo mi SP:

Código SQL:
Ver original
  1. ALTER PROCEDURE [dbo].[sp_Borra_Competencia]
  2.  (@id INT)
  3. AS
  4. DELETE FROM  T_Competencia
  5. WHERE ID=@id AND ID  NOT IN (SELECT DISTINCT id_competencia FROM t_gruporelacion)
  6.  
  7. IF @@rowcount > 0
  8. BEGIN
  9. SELECT 'Mensaje'='Se borro la tienda con ID ' + CONVERT(VARCHAR(10),@id)
  10. END
  11. ELSE
  12. SELECT 'Mensaje'='Error: La tienda tiene relacion con ID ' + CONVERT(VARCHAR(10),@id)

Ahora, lo que hace es compara que exista un ID en una tabla(T_competencia) y que no este dado de alta en otra tabla(t_gruporelacion) para poder borrar.

Ahora si tiene relacion muestra el mensaje de tiene relacion, y si NO existe el ID en ninguna de las 2 tablas,muestra el error: la tienda ya tiene relacion, lo que yo quiero es que en este pedazo de codigo:

Código SQL:
Ver original
  1. ELSE
  2. SELECT 'Mensaje'='Error: La tienda tiene relacion con ID ' + CONVERT(VARCHAR(10),@id)
poner otro if indicando:
Si no existe el ID:
'Mensaje'='Error: La tienda no existe' + convert(varchar(10),@id)

y si existe y tiene relacion mostrar el mensaje correcto:
'Mensaje'='Error: La tienda tiene relacion con ID ' + convert(varchar(10),@id

me explico...
  #10 (permalink)  
Antiguo 13/02/2013, 13:17
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: Store Procedure con la funcion Return

else
if @id is not null
begin
SELECT 'Mensaje'='Error: La tienda tiene relacion con ID ' + convert(varchar(10),@id)
end
else
tu mensaje


algo asi....saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #11 (permalink)  
Antiguo 14/02/2013, 08:57
 
Fecha de Ingreso: enero-2013
Mensajes: 93
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Store Procedure con la funcion Return

Gracias Libras por tu respuesta ya pude solucionar ese inconveniente, te comento mi SP quedo así:

Código SQL:
Ver original
  1. ALTER PROCEDURE [dbo].[sp_Borra_Competencia]
  2. (@id INT)
  3. AS
  4. DELETE FROM  T_Competencia
  5. WHERE ID=@id AND ID  NOT IN (SELECT DISTINCT id_competencia FROM t_gruporelacion)
  6.  
  7. IF @@rowcount > 0
  8. BEGIN
  9. SELECT 'Mensaje'='Se borro la tienda con ID ' + CONVERT(VARCHAR(10),@id)
  10. END
  11. ELSE IF @ID NOT IN(SELECT ID FROM T_Competencia)
  12. SELECT 'Mensaje'='La tienda no existe'
  13. ELSE
  14.  
  15. SELECT 'Mensaje'='Error: La tienda tiene relacion con ID ' + CONVERT(VARCHAR(10),@id)

Mi unica duda es como hacer estas mismas funciones con Return
  #12 (permalink)  
Antiguo 14/02/2013, 09:04
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: Store Procedure con la funcion Return

a ver explicate, para ti que es return? porque si lo que quieres es que el procedure te mande el valor que necesitas a una variable, lo que debes usar es OUTPUT

porque la definicion de return en sql server es:

Sale incondicionalmente de una consulta o procedimiento. RETURN es inmediata y completa, y se puede utilizar en cualquier punto para salir de un procedimiento, lote o bloque de instrucciones. Las instrucciones que siguen a RETURN no se ejecutan.
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #13 (permalink)  
Antiguo 14/02/2013, 09:09
 
Fecha de Ingreso: enero-2013
Mensajes: 93
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Store Procedure con la funcion Return

Por lo poco que e estado buscando y lo que me pidieron que hiciera (disculpa soy novato en SQL y trato de hacer lo que me piden..) es que devuelva un mensaje de error al momento de no realizar un movimiento y por lo que e investigado para que sirve el RETURN:
Cuando se utiliza con un procedimiento almacenado, RETURN no puede devolver un valor NULL. Si un procedimiento intenta devolver un valor NULL (por ejemplo, al utilizar RETURN @status cuando @status es NULL), se genera un mensaje de advertencia y se devuelve un valor 0

Lo que supongo que quiere mi jefe es que en lugar de utilizar los "select" utilice el RETURN para imprimir el mensaje..

Gracias por tu tiempo y no te desesperes u.u
  #14 (permalink)  
Antiguo 14/02/2013, 09:25
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: Store Procedure con la funcion Return

to complicate.......


con el return...

Código SQL:
Ver original
  1. ALTER PROCEDURE [dbo].[sp_Borra_Competencia]
  2. (@id INT)
  3. AS
  4. DELETE FROM  T_Competencia
  5. WHERE ID=@id AND ID  NOT IN (SELECT DISTINCT id_competencia FROM t_gruporelacion)
  6.  
  7. IF @@rowcount > 0
  8. BEGIN
  9. RETURN 1
  10. END
  11. ELSE IF @ID NOT IN(SELECT ID FROM T_Competencia)
  12. RETURN 2
  13. ELSE
  14.  RETURN 3


Código SQL:
Ver original
  1. DECLARE @return_status INT;
  2. EXEC @return_status = sp_Borra_Competencia '2';
  3. SELECT 'Return Status' = @return_status;

y ahora digamos tenemos todos los codigos de mensajes en un catalogo digamos tabla mensajes

select mensaje from mensajes where error_code=@return_status

y nos regresara

'Se borro la tienda con ID ' + convert(varchar(10),@id)
o
'La tienda no existe'
o
'Error: La tienda tiene relacion con ID ' + convert(varchar(10),@id)

dependiendo que error o mensaje te haya regresado el return.......

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #15 (permalink)  
Antiguo 14/02/2013, 09:39
 
Fecha de Ingreso: enero-2013
Mensajes: 93
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Store Procedure con la funcion Return

Gracias esto es lo que queria!

Ya lo ejecute y ya me funciona, me regresa por lo pronto el valor del return.. (1,2 o 3)

Respecto a los mensajes esos, creo una tabla?

Última edición por davidalonsso05; 14/02/2013 a las 09:45
  #16 (permalink)  
Antiguo 14/02/2013, 10:00
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: Store Procedure con la funcion Return

lo mas facil para manejar los mensajes seria con un catalogo(tabla) donde tengas almacenadas las definiciones de los return.

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #17 (permalink)  
Antiguo 14/02/2013, 10:29
 
Fecha de Ingreso: enero-2013
Mensajes: 93
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Store Procedure con la funcion Return

Ah bueno tratare de hacerlo :) de igual manera cualquier aporte extra si no es mucha molestia no vendria nada mal hehe... Saludos!
  #18 (permalink)  
Antiguo 14/02/2013, 11:38
 
Fecha de Ingreso: enero-2013
Mensajes: 93
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Store Procedure con la funcion Return

Cita:
Iniciado por Libras Ver Mensaje
to complicate.......


con el return...

Código SQL:
Ver original
  1. ALTER PROCEDURE [dbo].[sp_Borra_Competencia]
  2. (@id INT)
  3. AS
  4. DELETE FROM  T_Competencia
  5. WHERE ID=@id AND ID  NOT IN (SELECT DISTINCT id_competencia FROM t_gruporelacion)
  6.  
  7. IF @@rowcount > 0
  8. BEGIN
  9. RETURN 1
  10. END
  11. ELSE IF @ID NOT IN(SELECT ID FROM T_Competencia)
  12. RETURN 2
  13. ELSE
  14.  RETURN 3


Código SQL:
Ver original
  1. DECLARE @return_status INT;
  2. EXEC @return_status = sp_Borra_Competencia '2';
  3. SELECT 'Return Status' = @return_status;

y ahora digamos tenemos todos los codigos de mensajes en un catalogo digamos tabla mensajes

select mensaje from mensajes where error_code=@return_status

y nos regresara

'Se borro la tienda con ID ' + convert(varchar(10),@id)
o
'La tienda no existe'
o
'Error: La tienda tiene relacion con ID ' + convert(varchar(10),@id)

dependiendo que error o mensaje te haya regresado el return.......

saludos!
Bueno ya solo me falta lo de agregar los mensajes hehe, como seria mas o menos me podrias ayudar, saludos Libras
  #19 (permalink)  
Antiguo 14/02/2013, 11:43
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: Store Procedure con la funcion Return

podria ser algo asi:

create table mensajes(
id int,
mensaje varchar(max)
)

insert into mensajes values (1,'Error1')
insert into mensajes values (2,'Error1')
insert into mensajes values (3,'Error3')
insert into mensajes values (4,'Error4')

una vez con esto ya puedes hacer

DECLARE @return_status int;
EXEC @return_status = sp_Borra_Competencia '2';

select mensaje from mensajes where id=@return_status
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #20 (permalink)  
Antiguo 15/02/2013, 08:16
 
Fecha de Ingreso: enero-2013
Mensajes: 93
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Store Procedure con la funcion Return

Una disculpa ya no te pude contestar ayer Libras ya que solo vengo de 8 a 12 a las practicas pero si me sirvio mucho el ultimo codigo!!

Muchas Gracias!

Oye otra duda, se puede devolver un string con el Return en lugar de un entero? Devolver el mensaje directamente desde el Return en lugar de la tabla...

por ejemplo:

Código SQL:
Ver original
  1. ALTER PROCEDURE [dbo].[sp_Borra_Competencia]
  2. (@id INT)
  3. AS
  4. DELETE FROM  T_Competencia
  5. WHERE ID=@id AND ID  NOT IN (SELECT DISTINCT id_competencia FROM t_gruporelacion)
  6.  
  7. IF @@rowcount > 0
  8. BEGIN
  9. RETURN 'Registro Borrado'
  10. END
  11. ELSE IF @ID NOT IN(SELECT ID FROM T_Competencia)
  12. RETURN 'La tienda no existe'
  13. ELSE
  14.  RETURN 'Error la tienda tiene relacion'


Saludos y excelente fin de semana!!

Última edición por davidalonsso05; 15/02/2013 a las 08:45
  #21 (permalink)  
Antiguo 15/02/2013, 09:03
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: Store Procedure con la funcion Return

NO, como bien pusiste en la definicion de return, solo regresa un entero para regresar valores alfanumericos necesitarias usar output.

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #22 (permalink)  
Antiguo 15/02/2013, 09:19
 
Fecha de Ingreso: enero-2013
Mensajes: 93
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Store Procedure con la funcion Return

Es lo que le mencione a mi Jefe Libras y hasta ahorita entendio que no se podia! despues de perder 1 hora y media me dice que lo haga con OUTPUT!!

Última edición por davidalonsso05; 15/02/2013 a las 09:34
  #23 (permalink)  
Antiguo 15/02/2013, 09:42
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: Store Procedure con la funcion Return

Madre de dios............

http://www.forosdelweb.com/f87/conta...alida-1036382/
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: funcion, procedure, registro, return, select, 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 01:50.