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

ayuda con un proc. alm.

Estas en el tema de ayuda con un proc. alm. en el foro de SQL Server en Foros del Web. ok miren mi problema esta muy facil se programara en visual basic o algun lenguaje de programacion que si manejo, pero la actividad es esta, ...
  #1 (permalink)  
Antiguo 10/11/2008, 11:53
Avatar de chaka106  
Fecha de Ingreso: julio-2008
Ubicación: Un Punto En Mapa Central De Mexico
Mensajes: 70
Antigüedad: 15 años, 9 meses
Puntos: 1
ayuda con un proc. alm.

ok miren mi problema esta muy facil se programara en visual basic o algun lenguaje de programacion que si manejo, pero la actividad es esta, crear un proc. almc. qué lea dos datos de entrada y entregue dos de salida, el primer dato es un id de un mensaje de error que se debe mandar, el segundo sera un campo de cadena variable varchar en donde habran datos separados por comas como en un archivo csv algo asi "1,2,3,4,5" y al momento que lo lea lo separe algo asi
1
2
3
4
5
esta tarea ya la tengo ya me recibe el texto en comas y los separa en una tabla aparte, ahora lo que debo de hacer es leer el mensaje con el primer parametro que se mando al store procedure, les recuerdo ke recibe dos campos el primero es un id del mensaje y el segundo es el texto separado por comas, algo asi
("11a","var1,var2,var3")
selecciono el mensaje 11a y me devuelve una columna llamada mensaje corto este mensaje corto es algo como esto:
La matricula &matricula para el alumno &alumno de la carrera &carrera es incorrecta
en donde yo debo reemplazar &matricula por var1 ke me mando en el parametro y asi sucesivamente, pero deben de ser los campos exactos si no mandar un mensaje de error,
alguien podria ayudarme?? me comentaron que con un cursor puedo recorrer los datos de la tabla donde se guardan los datos separados por comas y con algo como un replace cambiar ese texto por otro, pero el problema es ke no se usar cursores, alguien tiene una mejor idea de como hacerlo o ke me expliken el funcionamiento de...
  #2 (permalink)  
Antiguo 10/11/2008, 12:40
 
Fecha de Ingreso: noviembre-2006
Ubicación: México
Mensajes: 866
Antigüedad: 17 años, 5 meses
Puntos: 8
Respuesta: ayuda con un proc. alm.

Tu problema es muy fácil pero te entendí muy poco.

Para la parte de "armar" tu mensaje, lo puedes hacer con un REPLACE, por ejemplo:

Código:
DECLARE @mensaje Varchar(1000)

SET  @mensaje = 'La matricula &matricula para el alumno &alumno de la carrera &carrera es incorrecta'

SELECT  @mensaje

SET  @mensaje = REPLACE (@mensaje , '&matricula', '12345467890')
SET  @mensaje = REPLACE (@mensaje , '&alumno', 'chaka106')
SET  @mensaje = REPLACE (@mensaje , ' &carrera', 'compu')

SELECT  @mensaje
La parte que no entendí me imagino que es el caso donde si hubo información para el alumno, la cual supongo sabes como buscarla, y ya sólo te queda "armar" el mensaje de la consulta, que es igual como se armo el de error, con REPLACE.

Otro tip es que seguramente vas a usar los CONVERT O CAST, que se utlizan para concatenar.
Código:
CONVERT(VARCHAR, @miVariable)  
CAST( @miVariable As VARCHAR(100) )
Saludos.
  #3 (permalink)  
Antiguo 10/11/2008, 13:05
Avatar de chaka106  
Fecha de Ingreso: julio-2008
Ubicación: Un Punto En Mapa Central De Mexico
Mensajes: 70
Antigüedad: 15 años, 9 meses
Puntos: 1
Respuesta: ayuda con un proc. alm.

Cita:
Iniciado por daniel00 Ver Mensaje
Tu problema es muy fácil pero te entendí muy poco.

Para la parte de "armar" tu mensaje, lo puedes hacer con un REPLACE, por ejemplo:

Código:
DECLARE @mensaje Varchar(1000)

SET  @mensaje = 'La matricula &matricula para el alumno &alumno de la carrera &carrera es incorrecta'

SELECT  @mensaje

SET  @mensaje = REPLACE (@mensaje , '&matricula', '12345467890')
SET  @mensaje = REPLACE (@mensaje , '&alumno', 'chaka106')
SET  @mensaje = REPLACE (@mensaje , ' &carrera', 'compu')

SELECT  @mensaje
La parte que no entendí me imagino que es el caso donde si hubo información para el alumno, la cual supongo sabes como buscarla, y ya sólo te queda "armar" el mensaje de la consulta, que es igual como se armo el de error, con REPLACE.

Otro tip es que seguramente vas a usar los CONVERT O CAST, que se utlizan para concatenar.
Código:
CONVERT(VARCHAR, @miVariable)  
CAST( @miVariable As VARCHAR(100) )
Saludos.
OK me va a servir ese codigo, te muestro lo que llevo
Código:
USE [CxC]
GO
/****** Object:  StoredProcedure [dbo].[usp_MensajeError]    Script Date: 11/10/2008 11:59:09 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		<Author,,Sergio de Jesus Tamayo Ortiz>
-- Create date: <Create Date,,31/10/2008>
-- Description:	<Description,,Obtiene el texto del mensaje de error>
-- =============================================
ALTER PROCEDURE [dbo].[usp_MensajeError] 
	@MensajeID varchar(7),
    @MsjVar varchar(500),
    @MsjError varchar(1000) output
    AS
SET NOCOUNT ON;
IF NOT EXISTS (SELECT MensajeCorto FROM Mensajes WHERE MensajeID=@MensajeID)
BEGIN
SET @MsjError='No se encontró el mensaje de error';
SELECT @MsjError    
END;
ELSE
BEGIN
CREATE TABLE Palabras(Palabra varchar(500));
---estas lineas separan los campos que vienen dentro de los parametros de entrada, los separa uno en cada columna----
	INSERT INTO Palabras SELECT NullIf(SubString(','+@MsjVar+',',ID,CharIndex(',',','+@MsjVar+',',ID)-ID),'')AS word
    FROM Tally
    WHERE ID<=Len(','+@MsjVar+',') AND SubString(','+@MsjVar+',',ID-1,1)=',';
-----------------------------Fin de Rutina para separar por comas---------------------------------------------------- 
    DROP TABLE Palabras;
END;
GO
bien ahora ahi les va la explicacion si encuentra el mensaje, va a checar si los parametros que reemplazara son los correctos si hay uno menos o uno mas mande mensaje de error, esto lo pensaba hacer con un @@rowcount si es = al numero de variables hacer el replace esto con la ayuda de un cursor para pasarle el valor a la variable ke estoy intercambiando espero haberme entendido
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 10:59.