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

SP con insert sql server

Estas en el tema de SP con insert sql server en el foro de SQL Server en Foros del Web. Hola disculpen soy nueva en esto , agradeceria mucho su ayuda!!! necesito hacer una inserción a una tabla nueva en sql serverde cada articulo por ...
  #1 (permalink)  
Antiguo 10/12/2009, 18:52
 
Fecha de Ingreso: diciembre-2009
Mensajes: 14
Antigüedad: 14 años, 4 meses
Puntos: 0
Exclamación Cursor con insert into sql server

Hola disculpen soy nueva en esto , agradeceria mucho su ayuda!!! necesito hacer una inserción a una tabla nueva en sql serverde cada articulo por factura, la tabla origen trae los siguientes datos:

Tabla1
Factura
Articulo
Numero de articulos

Datos
Factura Articulo NumeroArticulos
23 Lapiz 2
24 Pluma 3

y necesito que me inserte dos articulos identicos cuando el numero de articulos sea 2 y q inserte 3 cuando el numero de artiuclos sea 3 y asi sucesivamente

Estaba tratando hacerlo por medio de un store procedure con insert y un for para validar el número de Articulos.

El insert es algo así...

Insert Into Carga_Boleta_Match
select Factura, CveArticulo, NumeroArticulos
FROM Tabla1where b.CantidadPrendas =1
go
Insert Into Carga_Boleta_Match
select Factura, CveArticulo, NumeroArticulos
FROM Tabla1where b.CantidadPrendas =2
go
Insert Into Carga_Boleta_Match
select Factura, CveArticulo, NumeroArticulos
FROM Tabla1where b.CantidadPrendas =2


etc...

Última edición por gaviota81; 15/12/2009 a las 18:50
  #2 (permalink)  
Antiguo 10/12/2009, 20:43
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: SP con insert sql server

No lo tengo muy claro. Segun los datos que has puesto, podrías poner un ejemplo de cómo deberían quedar en la tabla nueva?
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #3 (permalink)  
Antiguo 10/12/2009, 21:52
 
Fecha de Ingreso: diciembre-2009
Mensajes: 14
Antigüedad: 14 años, 4 meses
Puntos: 0
Exclamación Respuesta: SP con insert sql server

Muchas gracias, soy nueva en esto de los SP y no se bien como se estructuran y lo que sucede es q en una tabla tengo la información así:

Factura CVEArticulo Articulo Cantidad
1234568 12346 ENCENDEDORES 1
1234565 12348 ORO 2
1234569 12349 PLUMA 3

Es decir tengo en una tabla la información de articulos por cantidad, osea de Encendedores tengo 1, de Oro tengo dos y de plumas 3, lo que necesito es grabar un registro por cada unidad adicional al valor de 1. Así cuando se tienen 2 articulos hay que grabar 2 registros idénticos de la tabla 1, en lugar de 1 y así sucesivamente dependiendo de la cantidad que esté reflejada en el campo Cantidad.

De esta forma:
Factura CveArticulo Articulo
1234568 12346 ENCENDEDORES
1234565 12348 ORO
1234565 12348 ORO
1234569 12349 PLUMA
1234569 12349 PLUMA
1234569 12349 PLUMA

Esto lo quiero meter en un store procedure agregarle un ciclo para que cuando inserte n veces, llevo algo así:



IF OBJECT_ID('ProcCarga_Bol_Match') IS NOT NULL
DROP PROC dbo.ProcCarga_Bol_Match
GO
CREATE PROCEDURE ProcCarga_Bol_Match
@Boleta bigint,
@CveArticulo bigint,
@desArticulo varchar(30),
@Peso real,
@Comentario varchar(50)

AS

Drop Table Carga_Boleta_Match
go
create table Carga_Boleta_Match
( Boleta bigint,
CveArticulo bigint,
desArticulo varchar(30),
Peso real)
go
Insert Into Carga_Boleta_Match
select factura, CveArticulo, DescArticulo,Peso
FROM Articulos
  #4 (permalink)  
Antiguo 11/12/2009, 08:24
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: SP con insert sql server

No lo he probado pero parece buena idea:
Código SQL:
Ver original
  1. DECLARE @minpeso REAL
  2.  
  3. SET @minpeso = 0
  4.  
  5. WHILE (SELECT 1 FROM Articulos WHERE Peso > @minpeso)
  6. BEGIN
  7.     INSERT INTO Carga_Boleta_Match
  8.     SELECT factura, CveArticulo, DescArticulo, Peso
  9.     FROM Articulos
  10.     WHERE Peso > @minpeso
  11.    
  12.     SELECT @minpeso = MIN(Peso) FROM Articulos
  13. END
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #5 (permalink)  
Antiguo 15/12/2009, 18:48
 
Fecha de Ingreso: diciembre-2009
Mensajes: 14
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: SP con insert sql server

hola, mil gracias por tu ayuda... ya tengo un cursor...

mi query del cursor devuelve esto:

Cantidad Boleta CveArticulo DesArticulo Peso Comentario
1 1234568 12346 ENCENDEDORES 4.5 Validar
2 1234565 12348 ORO 9.5 Validar
3 1234569 12349 PLUMA 64.5 Validar

El cursor es:

Código:
         SET NOCOUNT ON
  DECLARE @intFlag INT
 DECLARE @temp INT
 DECLARE @CantidadPrendas INT
 DECLARE @boleta VARCHAR(10)
 DECLARE @cveArticulo VARCHAR(10)
 DECLARE @desArticulo VARCHAR(10)
 DECLARE @peso VARCHAR(10)
 DECLARE @comentario VARCHAR(10)
 DECLARE articulos_cursor CURSOR FOR
 select b.CantidadPrendas,a.boleta,c.CveArticulo, c.DescArticulo, c.Peso,'Validar' as comentario
  FROM MOMBEF_Trabajo a, carga_MOMBDF  b, Carga_MOARCF c
  where a.Boleta=b.boleta
    and cast(a.sucursal as bigint)=b.sucursal
    and b.cveArticulo=c.CveArticulo
OPEN articulos_cursor;
FETCH NEXT FROM articulos_cursor;
WHILE @@FETCH_STATUS = 0
  BEGIN
         SET @intFlag = 1;
         FETCH NEXT FROM articulos_cursor INTO @temp,@boleta,@cveArticulo,@desArticulo,@peso,@comentario;
         WHILE (@intFlag <= @temp)
          BEGIN
               PRINT @temp
               SET @intFlag = @intFlag + 1
               IF @intFlag = @temp
            BREAK;
          END
  END
CLOSE articulos_cursor;
DEALLOCATE articulos_cursor;
GO

Pero solo me esta trayendo esto de resultado:

Cantidad Boleta CveArticulo DesArticulo Peso Comentario
1 1234568 12346 ENCENDEDORES 4.5 Validar


Cuando me deberia de traer esto:
Cantidad Boleta CveArticulo DesArticulo Peso Comentario
1 1234568 12346 ENCENDEDORES 4.5 Validar
2 1234565 12348 ORO 9.5 Validar
2 1234565 12348 ORO 9.5 Validar
3 1234569 12349 PLUMA 64.5 Validar
3 1234569 12349 PLUMA 64.5 Validar
3 1234569 12349 PLUMA 64.5 Validar


Alguna idea de que esta mal en mi cursor??


Millones de gracias!!!!
  #6 (permalink)  
Antiguo 16/12/2009, 08:37
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: SP con insert sql server

Aqui no nos gusta recomendar el uso de los cursores.
Siquiera has probado el codigo que te pase?
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #7 (permalink)  
Antiguo 16/12/2009, 16:23
 
Fecha de Ingreso: diciembre-2009
Mensajes: 14
Antigüedad: 14 años, 4 meses
Puntos: 0
De acuerdo Respuesta: SP con insert sql server

Muchas gracias si eche un vistazo a lo que me posteaste y me ayudo a la solución.... tambén se q los cursores no son lo más óptimo pero algunas veces son necesarios.

Agrego la solución...

Código:
Drop Table Carga_Boleta_Match
go
create table Carga_Boleta_Match 
( Boleta bigint,
  CveArticulo bigint,
  desArticulo varchar(30),
  Peso real,
  Comentario varchar(50))
  go
 
SET NOCOUNT ON   
 DECLARE @intFlag INT
 DECLARE @temp INT
 DECLARE @CantidadPrendas INT
 DECLARE @boleta VARCHAR(10)
 DECLARE @cveArticulo VARCHAR(10)
 DECLARE @desArticulo VARCHAR(10)
 DECLARE @peso VARCHAR(10)
 DECLARE @comentario VARCHAR(10)
 DECLARE @Sucursal INT
 DECLARE articulos_cursor CURSOR FOR
 select b.CantidadPrendas,a.boleta,c.CveArticulo, c.DescArticulo, c.Peso,'ass' as comentario
  FROM MOMBEF_Trabajo a, carga_MOMBDF  b, Carga_MOARCF c
  where a.Boleta=b.boleta
    and cast(a.sucursal as bigint)=b.sucursal
    and b.cveArticulo=c.CveArticulo
OPEN articulos_cursor;
--FETCH NEXT FROM articulos_cursor;
 FETCH NEXT FROM articulos_cursor INTO @temp,@boleta,@cveArticulo,@desArticulo,@peso,@comentario;
 WHILE @@FETCH_STATUS = 0
    BEGIN
        SET @intFlag = 0;
        WHILE  (@intFlag <@temp)
          BEGIN
              PRINT @temp
              INSERT INTO Carga_Boleta_Match 
              values (@boleta, @cveArticulo, @DesArticulo, @Peso, @comentario)
              FETCH NEXT FROM articulos_cursor INTO @temp,@boleta,@cveArticulo,@desArticulo,@peso,@comentario;
              SET @intFlag=@intFlag+1;
            IF @intFlag =@temp
             BREAK
            ELSE 
             CONTINUE 
         END  
    END
CLOSE articulos_cursor;
DEALLOCATE articulos_cursor;
GO
  #8 (permalink)  
Antiguo 16/12/2009, 16:36
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: SP con insert sql server

Al cliente.........lo que pida..........
  #9 (permalink)  
Antiguo 18/12/2009, 08:28
 
Fecha de Ingreso: diciembre-2009
Mensajes: 32
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: SP con insert sql server

Buenos días, me podrían colaborar con insert en sql server 2005; tengo una tabla ciudad que tiene de campo código_ciudad y nombre_ciudad quiero insertar una ciudad nueva el código que tengo es el siguiente
insert into ciudad (codigo, nombre)
value (251, 'prueba')
es decir el codigo de la ciudad sea 251 y el nombre sea prueba; me sale un error

Msg 102, Level 15, State 1, Line 2
Sintaxis incorrecta cerca de 'value'.
Gracias por su ayuda
  #10 (permalink)  
Antiguo 18/12/2009, 10:51
 
Fecha de Ingreso: diciembre-2009
Mensajes: 32
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: SP con insert sql server

Buenas, por internet me hablan algo de identity_insert on me quedaría el código asi:

Set Identity_insert ciudad on
insert into ciudad (Codido, Nombre)
values (601,'ttttttt')

pero el error que me muetra es
Msg 207, Level 16, State 1, Line 2
El nombre de columna 'Codido' no es válido.


Si le quito (codigo, Nombre) me muetra el siguinete error

Msg 8101, Level 16, State 1, Line 2
Sólo puede especificarse un valor explícito para la columna de identidad de la tabla 'ciudad' cuando se usa una lista de columnas e IDENTITY_INSERT es ON.
  #11 (permalink)  
Antiguo 18/12/2009, 10:52
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: SP con insert sql server

cambia por VALUES....
  #12 (permalink)  
Antiguo 18/12/2009, 14:34
 
Fecha de Ingreso: diciembre-2009
Mensajes: 32
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: SP con insert sql server

gracias, no pense que fuera por las minusculas
  #13 (permalink)  
Antiguo 18/12/2009, 15:07
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: SP con insert sql server

No son las minusculas, es la cuestion de PLURAL, pusiste VALUE y es VALUES
  #14 (permalink)  
Antiguo 18/12/2009, 15:20
 
Fecha de Ingreso: diciembre-2009
Mensajes: 32
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: SP con insert sql server

Me podrian colaborar no se pòr que no me toma el update

"Update Grupo " & _
" set Nombre = '" & nombre & "'" & _
" ,codigo_ciudad = " & ciudad & _
" ,correo = '" & correo & "'" & _
" ,clave = '" & clavec & "'" & _
" Where 1=1 " & _
" and Codigo = " & Colegio

Me dice que hay error en la (,) si la cambio de esta manera

" UPDATE Grupo " & _
" SET Nombre = '" & nombre & "'," & _
" codigo_ciudad = " & ciudad , & _
" correo = '" & correo & "'," & _
" clave = '" & clavec & "'" & _
" Where 1=1 " & _
" and Codigo = " & Colegio
Sale un error que me dice

Se esperaba un final de instrucción
/nuevo_evaluacion/la_actualizar_colegio_aux.asp, línea 27, columna 29
" codigo_ciudad = " & ciudad , & _
  #15 (permalink)  
Antiguo 21/12/2009, 12:39
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: SP con insert sql server

Antes de ejecutar la instruccion, que te la muestre y validas que la estructura sea correcta.
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 02:06.