Ver Mensaje Individual
  #20 (permalink)  
Antiguo 13/06/2009, 12:36
7xtr3am
 
Fecha de Ingreso: marzo-2009
Mensajes: 73
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: Re: Select de N registros en Procedimiento Almacenado

Cita:
Iniciado por Mithrandir Ver Mensaje
Asumuendo que tienes los datos importados dentro de una tabla (aunque sea temporal, o staging) dentro del servidor lo puedes hacer con:

INSERT INTO tabla_permanente (x,y,x)
SELECT x,y,z
FROM tabla_staging

De esa manera no importa si son 1, 10 o 10000 los registros. Funcionará bien y te libras del esperpento que son los cursores

bien ..... pero si lo que quiero hacer NO es un Insert sino operaciones con los resultados. Como el siguiente ejemplo:

Código:
DECLARE @position int
declare @cadena nvarchar(100)
declare @caracteres nvarchar(100)
declare @letra char

SET @position = 1
SET @cadena = 'todos los caracteres de una cadena sin repetir'
SET @caracteres = ''

WHILE @position <= len(@cadena)
BEGIN
	set @letra = SUBSTRING(@cadena, @position, 1)
	set @position = @position + 1

	if(charindex(@letra,@caracteres) = 0)
	begin
		set @caracteres = @caracteres + @letra
	end
END

select @caracteres
¿Lo único que me quedaría es un cursor como el que pongo a continuación? O ¿hay algo mejor?

Código:
DECLARE @position int
declare @cadena nvarchar(100)
declare @caracteres nvarchar(100)
declare @letra char

SET @caracteres = ''

declare CURSOR_LETRAS cursor for select lower(ltrim(rtrim(nombre))) from empresas
open CURSOR_LETRAS
fetch next from CURSOR_LETRAS into @cadena

while @@fetch_status = 0
begin
    --=================mis operaciones=======================
	SET @position = 1

	WHILE @position <= len(@cadena)
	BEGIN
		set @letra = SUBSTRING(@cadena, @position, 1)
		set @position = @position + 1

		if(charindex(@letra,@caracteres) = 0)
		begin
			set @caracteres = @caracteres + @letra
		end
	END
    --=======================================================

    fetch next from CURSOR_LETRAS into @cadena
end

close CURSOR_LETRAS
deallocate CURSOR_LETRAS

select @caracteres
Cabe destacar que para una tabla con más de 3400 registros y más de 40 columnas si tardo un poco, como decían por ahí parece que los cursores no son lo optimo o tal vez por lo lento de las operaciones