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

concatenar registros en procedimiento almacenado

Estas en el tema de concatenar registros en procedimiento almacenado en el foro de SQL Server en Foros del Web. He hecho un procedimineto almacenado con el objetivo de ocncatenar varios campos de varios registros de una tabla, aqui les dejo el código: ------------------------------------------------------------------------- set ...
  #1 (permalink)  
Antiguo 05/08/2011, 11:19
 
Fecha de Ingreso: junio-2011
Ubicación: La Habana
Mensajes: 22
Antigüedad: 13 años, 4 meses
Puntos: 0
concatenar registros en procedimiento almacenado

He hecho un procedimineto almacenado con el objetivo de ocncatenar varios campos de varios registros de una tabla, aqui les dejo el código:

-------------------------------------------------------------------------
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go


Alter PROCEDURE [dbo].[ProcedureMIPlanAct]
-- Add the parameters for the stored procedure here
@fechaI Datetime,
@fechaF Datetime

AS
BEGIN
SET NOCOUNT ON;
declare @fichero varchar(max), @fila varchar(max)
set @fichero = ''
set @fila = ''
truncate table SLAM.Calendario_TEMP
declare @fechaAux Datetime
set @fechaAux = @fechaI
while @fechaAux <= @fechaF
Begin
declare ajustafich cursor
for SELECT Lugar+char(10)+CONVERT(varchar,FechayHoradeinicio, 108) + ' '+ Título as Datos from
SLAM.Calendario where CONVERT(varchar, FechayHoradeinicio, 101) = @fechaAux
order by CONVERT(varchar,FechayHoradeinicio, 108), Lugar
open ajustafich
fetch next from ajustafich into @fichero
while @@fetch_status=0
begin
set @fila = @fila + char(10) + @fichero
set @fichero = ''
fetch next from ajustafich into @fichero
end
close ajustafich
deallocate ajustafich
insert into SLAM.Calendario_TEMP(Datos) values (@fila);
SET @fechaAux = dateadd(d, 1, @fechaAux)
End

END

------------------------------------------------------
el problemas es que al ejecutar el procedimiento me sale los registros repetidos, me explico, al ejecutarlo entre dos fechas donde solo hay un registro, me inserta en la tabla SLAM.CalendarioTemp 32 veces lo mismo, si alguien me puede ayudar se lo agradeceria.

Salu2
  #2 (permalink)  
Antiguo 05/08/2011, 11:55
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 2 meses
Puntos: 774
Respuesta: concatenar registros en procedimiento almacenado

Pues es como lo tienes en el while tienes que se repita mientras sea diferente una fecha de la otra esto es si tienes una diferencia de 30 dias entre tus fechas va a entrar y guardar 30 veces lo que le estas indicando... que es lo que logras con este procedimiento??

Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 05/08/2011, 12:53
 
Fecha de Ingreso: junio-2011
Ubicación: La Habana
Mensajes: 22
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: concatenar registros en procedimiento almacenado

gracias por tu pronta respuesta, la verdad ya lo resovi, era que no limpiaba el varchar que insertaba en la tabla despues de cerrar el cursor por lo que no era que se repetia lo mismo sino que ponia lo mismo y depsues lo demas y asi. Gracias de nuevo. Tengo este procedimiento para hacer un reporte de reporting services para sharepoint y lo necesito para mostrar un calendario personalizado y esta fue la manera que se me ocurrió.
  #4 (permalink)  
Antiguo 05/08/2011, 16:07
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 3 meses
Puntos: 180
Respuesta: concatenar registros en procedimiento almacenado

Me gustaria que nos dijeras que estas haciendo con ese store preocedure.
__________________
MCTS Isaias Islas
  #5 (permalink)  
Antiguo 08/08/2011, 05:47
 
Fecha de Ingreso: junio-2011
Ubicación: La Habana
Mensajes: 22
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: concatenar registros en procedimiento almacenado

Este procedimiento lo hice con el objetivo de insertar en una tabla temporal unos datos que necesito para un reporte para sharepoint en reporting services, por lo que hice el procedimiento es porque necesitaba concatenar a un varchar varios datos de varios registros por lo que necesite recorrer la tabla que los contenia dada la fecha en un rango de fecha que me entran por parametro, no se si me expliqué bien. Supongo que puedan haber otras ideas pero esta fue la via que se me ocurrio. Acepto sugerencias para eliminar el cursor ese que utilizo que sé que no es la mejor via de solución.
  #6 (permalink)  
Antiguo 08/08/2011, 09:11
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 3 meses
Puntos: 180
Respuesta: concatenar registros en procedimiento almacenado

Pues si nada mas vas a concatenar, no necesitas un cursor.
__________________
MCTS Isaias Islas
  #7 (permalink)  
Antiguo 09/08/2011, 06:10
 
Fecha de Ingreso: junio-2011
Ubicación: La Habana
Mensajes: 22
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: concatenar registros en procedimiento almacenado

si pero tenia que concatenar diferentes datos de un registro entre si y con otros datos de otro registro no se su me hago explicar, pongo un ejemplo:

Imaginemos que la tabla tenia esto:

Nombre Edad Cuidad

Shael 25 Habana
Pepe 30 Mexico
Lolo 40 Italia

y lo que quiero es que me quede a la hora de mostrarlo es:

Shael: 25 Habana
Pepe:30 Mexico
Lolo:40 Italia

todo eso en un solo registro o una sola variable varchar por ejemplo
  #8 (permalink)  
Antiguo 09/08/2011, 09:57
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 3 meses
Puntos: 180
Respuesta: concatenar registros en procedimiento almacenado

Select campo1 + ': ' + campo2 +' '+ campo3 from ..........
__________________
MCTS Isaias Islas
  #9 (permalink)  
Antiguo 09/08/2011, 11:16
 
Fecha de Ingreso: junio-2011
Ubicación: La Habana
Mensajes: 22
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: concatenar registros en procedimiento almacenado

si esa parte concatenaria esos campos pero de cada registro por separado, la idea es hacer eso y unirlo con el mismo resultado de ese select de los demas registros, le digo registros a las diferentes filas de la tabla ok
  #10 (permalink)  
Antiguo 09/08/2011, 11:26
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 3 meses
Puntos: 180
Respuesta: concatenar registros en procedimiento almacenado

danos ejemplos....
__________________
MCTS Isaias Islas
  #11 (permalink)  
Antiguo 09/08/2011, 11:37
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 2 meses
Puntos: 774
Respuesta: concatenar registros en procedimiento almacenado

No seria algo asi:

Código SQL:
Ver original
  1. CREATE TABLE #OFICINAS
  2. (
  3. COD_OFICINA NVARCHAR(5)
  4. )
  5.  
  6. INSERT INTO #OFICINAS VALUES('OF001')
  7. INSERT INTO #OFICINAS VALUES('OF001')
  8. INSERT INTO #OFICINAS VALUES('OF001')
  9. INSERT INTO #OFICINAS VALUES('OF002')
  10. INSERT INTO #OFICINAS VALUES('OF002')
  11. INSERT INTO #OFICINAS VALUES('OF002')
  12. INSERT INTO #OFICINAS VALUES('OF002')
  13. INSERT INTO #OFICINAS VALUES('OF003')
  14. INSERT INTO #OFICINAS VALUES('OF003')
  15. INSERT INTO #OFICINAS VALUES('OF003')
  16. INSERT INTO #OFICINAS VALUES('OF003')
  17.  
  18. DECLARE @var VARCHAR(MAX)
  19. SET @var=''
  20. SELECT @var=@var + cod_oficina + ' ' FROM #oficinas
  21. print @var
  22. Resultado
  23. [B]OF001 OF001 OF001 OF002 OF002 OF002 OF002 OF003 OF003 OF003 OF003 [/B]

Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: concatenar, procedimiento, registros, select, tabla, almacenar, campos
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 17:05.