INSERT's x veces

29/08/2007 - 21:05 por CHAR72 | Informe spam
Hola, mi problema es el siguiente: tengo una tabla con:

PRODUCTO1 , 10
PRODUCTO2 , 4

Quisiera que en una tabla me agregue 10 registros de PRODUCTO1 y 4 registros
de PRODUCTO2. Se que podria abrir un cursor y en un loop repetir x veces
INSERT pero queria saber si hay otra forma evitando los cursores.

Saludos

Carlos

Preguntas similare

Leer las respuestas

#1 Martin
29/08/2007 - 22:42 | Informe spam
mmm, no te entendí bien,

pero si no querés unsar cursores, y podés usar un for o un while lo mentés
como sentencia de bucle...


"CHAR72" <char72[nos pa m]@gmail.com> escribió en el mensaje
news:Oks6W%
Hola, mi problema es el siguiente: tengo una tabla con:

PRODUCTO1 , 10
PRODUCTO2 , 4

Quisiera que en una tabla me agregue 10 registros de PRODUCTO1 y 4
registros de PRODUCTO2. Se que podria abrir un cursor y en un loop repetir
x veces INSERT pero queria saber si hay otra forma evitando los
cursores.

Saludos

Carlos

Respuesta Responder a este mensaje
#2 Carlos Sacristan
30/08/2007 - 09:57 | Informe spam
Un bucle WHILE al final es lo mismo que un cursor. Lo ideal es intentar
siempre trabajar con conjuntos de registros, que es para lo que SQL Server
está optimizado: en estos casos lo mejor es tener una tabla que contenga
números (más útil de lo que puedas pensar) para devolver los registros que
te interesen. Por ejemplo:

CREATE TABLE #t ( num INT)
DECLARE @i INT
SET @i=1

WHILE @i < 100
BEGIN
INSERT #t VALUES (@i)
SET @i=@i+1
END

SELECT 'PRODUCTO1', 10
FROM #t
WHERE num <= 10
UNION ALL
SELECT 'PRODUCTO2', 4
FROM #t
WHERE num <= 4


"CHAR72" <char72[nos pa m]@gmail.com> escribió en el mensaje
news:Oks6W%
Hola, mi problema es el siguiente: tengo una tabla con:

PRODUCTO1 , 10
PRODUCTO2 , 4

Quisiera que en una tabla me agregue 10 registros de PRODUCTO1 y 4
registros de PRODUCTO2. Se que podria abrir un cursor y en un loop repetir
x veces INSERT pero queria saber si hay otra forma evitando los
cursores.

Saludos

Carlos

Respuesta Responder a este mensaje
#3 Alejandro Mesa
30/08/2007 - 15:42 | Informe spam
Carlos,

Muy util contar con una tabla auxiliar de #s. Esta solucion es basada en una
idea de Itzik Ben-Gan para generar numeros al vuelo.

;with
L0 as (select 1 as c1 union all select 1 as c1),
L1 as (select 1 as c1 from L0 as a cross join L0 as b),
L2 as (select 1 as c1 from L1 as a cross join L1 as b),
L3 as (select 1 as c1 from L2 as a cross join L2 as b),
L4 as (select 1 as c1 from L3 as a cross join L3 as b),
Nums as (select row_number() over(order by c1) as n from L4)
insert into dbo.t2(c1, c2)
select a.c1, a.c2
from dbo.t1 as a inner join Nums as b on b.n <= a.c2;


AMB


"Carlos Sacristan" wrote:

Un bucle WHILE al final es lo mismo que un cursor. Lo ideal es intentar
siempre trabajar con conjuntos de registros, que es para lo que SQL Server
está optimizado: en estos casos lo mejor es tener una tabla que contenga
números (más útil de lo que puedas pensar) para devolver los registros que
te interesen. Por ejemplo:

CREATE TABLE #t ( num INT)
DECLARE @i INT
SET @i=1

WHILE @i < 100
BEGIN
INSERT #t VALUES (@i)
SET @i=@i+1
END

SELECT 'PRODUCTO1', 10
FROM #t
WHERE num <= 10
UNION ALL
SELECT 'PRODUCTO2', 4
FROM #t
WHERE num <= 4


"CHAR72" <char72[nos pa m]@gmail.com> escribió en el mensaje
news:Oks6W%
> Hola, mi problema es el siguiente: tengo una tabla con:
>
> PRODUCTO1 , 10
> PRODUCTO2 , 4
>
> Quisiera que en una tabla me agregue 10 registros de PRODUCTO1 y 4
> registros de PRODUCTO2. Se que podria abrir un cursor y en un loop repetir
> x veces INSERT pero queria saber si hay otra forma evitando los
> cursores.
>
> Saludos
>
> Carlos
>



Respuesta Responder a este mensaje
#4 CHAR72
31/08/2007 - 00:02 | Informe spam
Gracias a los que respondieron. Pense que me habia hecho entender pero no
fui claro en exponer mi cuestion, perdon !

Estoy en un sp y ya tengo en una tabla los x elementos (PRODUCTO1 y
PRODUCTO2) que son ejemplos y no los conozcos, el usuario los elije.
Necesito uno a uno ver la cantidad y agregar esa cantidad de registros en
otra tabla que quedaria asi:

PRODUCTO1
PRODUCTO1
PRODUCTO1
PRODUCTO1
PRODUCTO1
PRODUCTO1
PRODUCTO1
PRODUCTO1
PRODUCTO1
PRODUCTO1
PRODUCTO2
PRODUCTO2
PRODUCTO2
PRODUCTO2

Una tabla es de stock y la otra de inventario (los productos con un numero
de serie).

Como dijo Martin, recorrere uno a uno y agregaré, pregunte por si habia otra
opcion.

Saludos y gracias



"CHAR72" <char72[nos pa m]@gmail.com> escribió en el mensaje
news:Oks6W%
Hola, mi problema es el siguiente: tengo una tabla con:

PRODUCTO1 , 10
PRODUCTO2 , 4

Quisiera que en una tabla me agregue 10 registros de PRODUCTO1 y 4
registros de PRODUCTO2. Se que podria abrir un cursor y en un loop repetir
x veces INSERT pero queria saber si hay otra forma evitando los
cursores.

Saludos

Carlos

Respuesta Responder a este mensaje
#5 Alejandro Mesa
31/08/2007 - 01:54 | Informe spam
Creo que no has leido bien, pues el ejemplo de Carlos (el mio usa el mismo
principio) hace exactamente lo que pedistes.


AMB

"CHAR72" wrote:

Gracias a los que respondieron. Pense que me habia hecho entender pero no
fui claro en exponer mi cuestion, perdon !

Estoy en un sp y ya tengo en una tabla los x elementos (PRODUCTO1 y
PRODUCTO2) que son ejemplos y no los conozcos, el usuario los elije.
Necesito uno a uno ver la cantidad y agregar esa cantidad de registros en
otra tabla que quedaria asi:

PRODUCTO1
PRODUCTO1
PRODUCTO1
PRODUCTO1
PRODUCTO1
PRODUCTO1
PRODUCTO1
PRODUCTO1
PRODUCTO1
PRODUCTO1
PRODUCTO2
PRODUCTO2
PRODUCTO2
PRODUCTO2

Una tabla es de stock y la otra de inventario (los productos con un numero
de serie).

Como dijo Martin, recorrere uno a uno y agregaré, pregunte por si habia otra
opcion.

Saludos y gracias



"CHAR72" <char72[nos pa m]@gmail.com> escribió en el mensaje
news:Oks6W%
> Hola, mi problema es el siguiente: tengo una tabla con:
>
> PRODUCTO1 , 10
> PRODUCTO2 , 4
>
> Quisiera que en una tabla me agregue 10 registros de PRODUCTO1 y 4
> registros de PRODUCTO2. Se que podria abrir un cursor y en un loop repetir
> x veces INSERT pero queria saber si hay otra forma evitando los
> cursores.
>
> Saludos
>
> Carlos
>



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida