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

[SOLUCIONADO] Como recorrer toda la tabla con mi stored??

Estas en el tema de Como recorrer toda la tabla con mi stored?? en el foro de SQL Server en Foros del Web. Estimados buenos dias, este es mi primer post. Estoy creando un script para copiar archivos segun el nombre (demasiado personalizado) y ete aqui que he ...
  #1 (permalink)  
Antiguo 19/03/2013, 09:57
 
Fecha de Ingreso: marzo-2013
Mensajes: 3
Antigüedad: 11 años, 1 mes
Puntos: 0
Como recorrer toda la tabla con mi stored??

Estimados buenos dias, este es mi primer post. Estoy creando un script para copiar archivos segun el nombre (demasiado personalizado) y ete aqui que he probado de hacerlo con cursor o sin cursor y de las dos formas solo copia el primer archivo y no puedo hacerlo recorrer por toda la tabla.
No se fijen en la improlijidad del codigo es que lo necesito urgente para separar .mp3 de un archivo de mas de 10 mil.

Agradezco infinitamente cualquier ayuda.

sin cursor
--------------
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
alter procedure [dbo].[sp_copia_archivos_nocursor] as
-- -------------------------------
-- Argumentos
-- -------------------------------
-- <Argumentos tipo valor default descripcion>
declare
@loop int
,@counter int
,@nombre nvarchar(100)
,@ls_archivo_origen varchar(100) --archvio origen
,@ls_archivo_destino varchar(100) --archvio origen
,@pparte nvarchar(100)
,@sparte nvarchar(100)
,@sComando as varchar(200)


SET @loop = isnull((SELECT count(*) FROM nombre),0);
SET @counter= 1;
set @nombre = (select nombre from nombre where id = @counter);
set @pparte = 'c:\audios prueba\';
set @sparte = 'D:\b';
set @ls_archivo_origen = @pparte+@nombre+'.mp3';
set @ls_archivo_destino = @sparte;
set @sComando='XCOPY "' + @ls_archivo_origen +'" ' + @ls_archivo_destino;


WHILE @loop >0 and @counter <=@loop

begin


exec xp_cmdshell @sComando

SET @counter = @counter +1
select 0
return @@error
end
------------------------
con cursor
------------------------
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
alter procedure [dbo].[sp_copia_archivos_cursor] as
-- -------------------------------
-- Argumentos
-- -------------------------------
-- <Argumentos tipo valor default descripcion>
declare
@nombre varchar(100)
,@ls_archivo_origen varchar(100) --archvio origen
,@ls_archivo_destino varchar(100) --archvio origen
,@pparte nvarchar(100)
,@sparte nvarchar(100)
,@sComando as varchar(200)
set @pparte = 'c:\audios prueba\';
set @sparte = 'D:\b';
set @ls_archivo_origen = @pparte+@nombre+'.mp3';
set @ls_archivo_destino = @sparte;
set @sComando='XCOPY "' + @ls_archivo_origen +'" ' + @ls_archivo_destino

DECLARE
nnombre CURSOR FOR select nombre from nombre

OPEN nnombre

FETCH nnombre into @nombre


WHILE (@@FETCH_STATUS = 0 )

BEGIN

exec xp_cmdshell @sComando



FETCH nnombre into @nombre
select 0
return @@error
END

CLOSE nnombre

DEALLOCATE nnombre


Desde ya gracias
  #2 (permalink)  
Antiguo 19/03/2013, 10:13
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: Como recorrer toda la tabla con mi stored??

el modo en que recorro todos los elementos de una tabla sin cursor con un while :P


Código SQL:
Ver original
  1. SELECT *, IDENTITY(INT,1,1) rn INTO #temp FROM tabla
  2.  
  3. DECLARE @x INT
  4. SET @x=1
  5. while @x<=(SELECT COUNT(*) FROM #temp)
  6. BEGIN
  7. SELECT * FROM #temp WHERE rn=@x
  8. SET @x=@x+1
  9. END

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 19/03/2013, 11:14
 
Fecha de Ingreso: marzo-2013
Mensajes: 3
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: Como recorrer toda la tabla con mi stored??

Islas esta perfecta la ayuda, vos sabes que cuando lo ejecuto copia siempre el mismo archivo tantas veces como suma el contador.
Se que el problema esta en la asignacion de la variable @nombre. El tema es que probe ubicarlo mas abajo, tambien dentro del bloque y me da diferentes errores.
Les paso como va quedando el sp.
Disculpen que insista sino que no le veo salida.

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
alter procedure [dbo].[sp_copia_archivos_nocursor] as
-- -------------------------------
-- Argumentos
-- -------------------------------
-- <Argumentos tipo valor default descripcion>
declare

@x int
,@nombre nvarchar(100)
,@ls_archivo_origen varchar(100) --archvio origen
,@ls_archivo_destino varchar(100) --archvio origen
,@pparte nvarchar(100)
,@sparte nvarchar(100)
,@sComando as varchar(200)

SET @x= 1;
set @nombre = (select nombre from nombre where id = @x);
set @pparte = 'c:\audios prueba\';
set @sparte = 'D:\b';
set @ls_archivo_origen = @pparte+@nombre+'.mp3';
set @ls_archivo_destino = @sparte;
set @sComando='XCOPY "' + @ls_archivo_origen +'" ' + @ls_archivo_destino;


WHILE @x<=(select count(*) from nombre)

begin


exec xp_cmdshell @sComando

set @x=@x+1

end
select 0
return @@error
  #4 (permalink)  
Antiguo 19/03/2013, 11:26
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: Como recorrer toda la tabla con mi stored??

Cita:
Iniciado por gustavooo13 Ver Mensaje
Islas esta perfecta la ayuda
Pero si te conteste yo Libras



Código SQL:
Ver original
  1. SET ANSI_NULLS ON
  2. SET QUOTED_IDENTIFIER ON
  3. GO
  4. ALTER PROCEDURE [dbo].[sp_copia_archivos_nocursor] AS
  5. -- -------------------------------
  6. -- Argumentos
  7. -- -------------------------------
  8. -- <Argumentos tipo valor default descripcion>
  9. DECLARE
  10.  
  11. @x INT
  12. ,@nombre nvarchar(100)
  13. ,@ls_archivo_origen VARCHAR(100) --archvio origen
  14. ,@ls_archivo_destino VARCHAR(100) --archvio origen
  15. ,@pparte nvarchar(100)
  16. ,@sparte nvarchar(100)
  17. ,@sComando AS VARCHAR(200)
  18.  
  19. SET @x= 1;
  20. SELECT nombre,IDENTITY(INT,1,1) AS rn INTO #temp FROM nombre
  21.  
  22. WHILE @x<=(SELECT COUNT(*) FROM #temp)
  23.  
  24. BEGIN
  25.  
  26. SET @nombre = (SELECT nombre FROM #temp WHERE rn = @x);
  27. SET @pparte = 'c:\audios prueba\';
  28. set @sparte = 'D:\b';
  29. set @ls_archivo_origen = @pparte+@nombre+'.mp3';
  30. set @ls_archivo_destino = @sparte;
  31. set @sComando='XCOPY "' + @ls_archivo_origen +'" ' + @ls_archivo_destino;
  32.  
  33. exec xp_cmdshell @sComando
  34.  
  35. set @x=@x+1
  36.  
  37. end
  38. select 0
  39. return @@error

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 19/03/2013, 11:46
 
Fecha de Ingreso: marzo-2013
Mensajes: 3
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: Como recorrer toda la tabla con mi stored??

Grossoooo!!! ya funciona correctamente. Como no me di cuenta de meter todo en
el bloque. Ahora que ya funciona voy a ver de generalizarlo mas.
Disculpa la equivocacion, ahora cierro el tema y te dejo unos puntines.

Gracias por la pronta respuesta, ya me sumo como colaborador o consultador a este foro.
  #6 (permalink)  
Antiguo 19/03/2013, 12:09
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: Como recorrer toda la tabla con mi stored??

"Tu y yo, somos uno mismo........"
__________________
MCTS Isaias Islas
  #7 (permalink)  
Antiguo 19/03/2013, 12: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: Como recorrer toda la tabla con mi stored??

Cita:
Iniciado por iislas Ver Mensaje
"Tu y yo, somos uno mismo........"
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: copia, server, sql, stored
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 18:52.