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

Sp - Update, Select

Estas en el tema de Sp - Update, Select en el foro de SQL Server en Foros del Web. Hola a todos: Necesito hacer un procedimiento almacenado que me actualice algunos datos de un registro y luego me muestre otros datos de ese mismo ...
  #1 (permalink)  
Antiguo 26/01/2006, 06:00
Avatar de PMP
PMP
 
Fecha de Ingreso: febrero-2003
Ubicación: Chacabuco - Buenos Aires
Mensajes: 214
Antigüedad: 21 años, 2 meses
Puntos: 1
Sp - Update, Select

Hola a todos:

Necesito hacer un procedimiento almacenado que me actualice algunos datos de un registro y luego me muestre otros datos de ese mismo registro.
¿Es posible hacerlo en un mismo sp?.
He intentado hacerlo pero no he tenido éxito.


Saludos.
  #2 (permalink)  
Antiguo 26/01/2006, 07:54
Avatar de PMP
PMP
 
Fecha de Ingreso: febrero-2003
Ubicación: Chacabuco - Buenos Aires
Mensajes: 214
Antigüedad: 21 años, 2 meses
Puntos: 1
Antes que nada perdón por mi ignorancia en el tema.
Así como lo hice funciona bien, pero no me gusta como queda.
Quisiera hacerlo mas sencillo, por ejemplo:

Tener que pasar el valor de 3 variables
@mbr_id
@table_mbr
@table_vip

De esta forma evito todos los "IF"



Código:
ALTER PROCEDURE st_miembros_visita
(
@mbr_id      int,
@lengua char(1) ='S'
)
AS
IF @lengua = 'S'
	BEGIN	
	SELECT TOP 1 mbr.nombre, mbr.pais, mbr.pais_cod, mbr.provincia, vip.id 
	FROM miembros AS mbr LEFT OUTER JOIN  s_top vip ON mbr.id_usuario = vip.id WHERE mbr.id_usuario = @mbr_id
	UPDATE miembros SET visitas = visitas + 1, ultima = GetDate()WHERE id_usuario = @mbr_id
	END
ELSE
	IF @lengua = 'E' 
		BEGIN	
		SELECT TOP 1 mbr.nombre, mbr.pais, mbr.pais_cod, mbr.provincia, vip.id 
		FROM e_miembros AS mbr LEFT OUTER JOIN  e_top vip ON mbr.id_usuario = vip.id WHERE mbr.id_usuario = @mbr_id
		UPDATE e_miembros SET visitas = visitas + 1, ultima = GetDate()WHERE id_usuario = @mbr_id	
		END
	ELSE
		IF @lengua = 'P' 
			BEGIN	
			SELECT TOP 1 mbr.nombre, mbr.pais, mbr.pais_cod, mbr.provincia, vip.id 
			FROM p_miembros AS mbr LEFT OUTER JOIN  p_top vip ON mbr.id_usuario = vip.id WHERE mbr.id_usuario = @mbr_id
			UPDATE p_miembros SET visitas = visitas + 1, ultima = GetDate()WHERE id_usuario = @mbr_id
			END

Set NoCount On
He intentado poner

Código:
ALTER PROCEDURE st_miembros_visita
(
@mbr_id      int,
@table_mbr varChar(10) = 'miembros',
@table_vip varChar(5) = 's_top'
)
AS
SELECT TOP 1 mbr.nombre, mbr.pais, mbr.pais_cod, mbr.provincia, vip.id 
FROM @table_mbr AS mbr LEFT OUTER JOIN @table_stop vip ON mbr.id_usuario .....
Pero me genera un error diciéndome que debo declarar "@table_mbr".


Tambien probé

Código:
ALTER PROCEDURE st_miembros_visita
(
@mbr_id      int,
@table_mbr varChar(10) = 'miembros',
@table_vip varChar(5) = 's_top'
)
AS
DECLARE @strSQL
SET @strSQL = ('SELECT TOP 1 mbr.nombre, .... FROM ' + @table_mbr + ' AS mbr LEFT OUTER JOIN ' + @table_stop + ' AS vip ON mbr.id_usuario .....

EXECUTE (@strSQL)
Pero no me muestra ningun resultado.

¿¿¿¿¿¿¿¿¿Cómo puedo ser tan burro???????????

Muchas gracias.

Última edición por PMP; 26/01/2006 a las 08:09
  #3 (permalink)  
Antiguo 26/01/2006, 16:51
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
Si se puede hacerlo, pero lo mas recomendable es hacerlo en 2 pasos

CREATE PROCEDURE...
...
SET NOCOUNT ON

UPDATE tabla
SET cosa = cosa
WHERE algo = 'algo'

SELECT *
FROM tabla
WHERE algo = 'algo'

GO
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #4 (permalink)  
Antiguo 27/01/2006, 11:21
Avatar de PMP
PMP
 
Fecha de Ingreso: febrero-2003
Ubicación: Chacabuco - Buenos Aires
Mensajes: 214
Antigüedad: 21 años, 2 meses
Puntos: 1
Muchas gracias Mithrandir.

Y lo que expongo en el segundo mensaje se puede hacer?

Adios.
  #5 (permalink)  
Antiguo 27/01/2006, 13:05
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
Si pretendes usar sql dinámico te recomiendo esta lectura obligada (siempre leo la version en ingles, no se si esta en español esté bien traducida):
http://www.hayes.ch/sql/sql_dinamico.html

Creo que tener 3 versiones de la misma tabla es un error de diseño. Mejor sería tener una sola tabla son los 3 (hasta N) lenguajes y simplemente agregar el identificador de lenguaje como un campo más. Así ni sql dinamico ni IFs interminables:
Código:
SELECT TOP 1 mbr.nombre, mbr.pais, mbr.pais_cod, mbr.provincia, vip.id 
FROM p_miembros AS mbr LEFT OUTER JOIN  p_top vip ON mbr.id_usuario = vip.id
WHERE mbr.id_usuario = @mbr_id
AND lengua = @lengua

UPDATE p_miembros SET visitas = visitas + 1, ultima = GetDate()WHERE id_usuario = @mbr_id
AND lengua = @lengua 
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #6 (permalink)  
Antiguo 30/01/2006, 06:02
Avatar de PMP
PMP
 
Fecha de Ingreso: febrero-2003
Ubicación: Chacabuco - Buenos Aires
Mensajes: 214
Antigüedad: 21 años, 2 meses
Puntos: 1
Estoy totalmente de acuerdo con lo que dice de utilizar una sola tabla con los tres lenguajes, pero es que cuando comenze a trabajar para esta empresa, ya estaba diseñado así y lamentablemente es practicamente imposible modificarlo.

Muchas gracias por todo, daré lectura al artículo recomendado.
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:14.