none
insertar en Procedimiento de almacenado. RRS feed

  • Pregunta

  • Buenas tardes.

        Necesito ayuda por favor, tengo problemas para insertar datos en una variable tipo tabla, desde otro procedimiento, de acuerdo al trabajo del anterior trabajador, el creo 3 procedimientos que ocupan la misma variable tabla, en la cual se guardan los mismos datos que son extraidos desde un excel (cada excel se conecta a cada procedimiento que ocupa la misma variable tabla). al intentar insertar un nuevo campo me dice:

    "Msg 213, Level 16, State 1, Procedure sp_DATOS_INFORME_VENTAS_CAFF_FILTRO, Line 17
    El nombre de columna o los valores especificados no corresponden a la definición de la tabla."

    agregue el campo en la variable tabla, pero desde este procedure no me permite ingresarle datos.

    "insert into TABLA_DATOS
        select  
        'F',
        convert(date,SIH.[Posting Date],103) as 'Fecha Registro',
        SIL.[Document No_] as 'Nº Documento',
        SIH.[Order No_] as 'Nº Pedidod',
        SIH.[Document No_ SII] as 'Nº Documento SII',
        SIH.[Legacy Doc_ Type] as 'Tipo Doc legal',
        SIH.[External Document No_] as 'Nº documento externo',
        SIL.[Sell-to Customer No_] as 'Venta a Nº Cliente',
        C.Name as 'Nombre Cliente',
        SIH.[PFCustomer Group] as 'Customer Group',
        SIH.[Salesperson Code] as 'Cod Vendedor',
        (select Name from  [CAFFA03].[PRODUCCION].[dbo].Caffarena$Salesperson_Purchaser where Code = SIH.[Salesperson Code]) as 'Nombre Vendedor',
        SIL.No_ as 'Codigo Producto',
        SIL.[PFVertical Component] + '-' + SIL.[PFHorizontal Component] as 'Cod Variante',
        I.Description as 'Descripcion',
        CASE
            WHEN  SIL.Type = 0 then  ''
            WHEN  SIL.Type = 1 then  'CUENTA'
            WHEN  SIL.Type = 2 then  'PRODUCTO'
            WHEN  SIL.Type = 3 then  'RECURSO'
            WHEN  SIL.Type = 4 then  'ACTIVO FIJO'
            WHEN  SIL.Type = 5 then  'CARGO(PROD)'
        END as 'Tipo',
        IV.[PFItem Status] as 'Status',    
        convert(numeric,SIL.Quantity) as 'Cantidad',
        convert(numeric,SIL.Amount)  as 'Precio Venta Excl. Vat',
        --convert(numeric,SIL.Amount) as 'Importe',
        SIL.Amount as 'Importe',
        convert(numeric,SIL.[Amount Including VAT]) as 'Importe IVA incl.',
        convert(numeric,SIL.[Line Discount Amount]) as 'Importe dto Linea',
        I.PFCollection,
        I.PFSeason,
        I.PFTheme,
        I.PFBrand,
        I.[Product Group Code],
        I.[Item Category Code],    
        SIH.[Ship-to Name] as 'Envio a nombre',    
        SIH.[Ship-to Code]  as 'Cod Direcc envio cliente',    
        SIH.[Ship-to Address] as 'Cod dir envio Cliente',
        '' as 'Cod Almancén devol venta IC',
        SIH.[Payment Method Code] as 'Forma de pago',    
        '' as 'Cod auditoria dev',
        '' as 'Descripcion',    
        convert(numeric,SIL.[Unit Cost]) as 'Coste Unitario',
        convert(numeric,I.[Unit Cost]) as 'Costo Unitario',
        convert(numeric,I.[Last Direct Cost]) as 'Ultimo costo directo',
        SIH.[No_ Printed] as 'Nº Copias impresas',
        convert(date,SIH.[Order Date],103) as 'Fecha Pedido',
        SIH.[Campaign Code] as 'Codigo Campaña VDC',
        SIH.[Customer Price Group] as 'Grupo Precio CLiente',    
        convert(decimal(18,6),I.[Unit Cost]) as 'Costo Unitario',    
        convert(numeric,I.[Last Direct Cost]) as 'ultimo Costo directo',
        [Cost Amount (Actual)] as 'Importe costo real'
        
            from [CAFFA03].[PRODUCCION].[dbo].Caffarena$Customer C
        inner join [CAFFA03].[PRODUCCION].[dbo].[Caffarena$Sales Invoice Line] SIL  on C.No_ = SIL.[Sell-to Customer No_]
        inner join [CAFFA03].[PRODUCCION].[dbo].[Caffarena$Sales Invoice Header] SIH on SIL.[Document No_] = SIH.No_
        left outer join  [CAFFA03].[PRODUCCION].[dbo].Caffarena$Item I on SIL.No_ = I.No_
        left outer join [CAFFA03].[PRODUCCION].[dbo].[Caffarena$Item Variant] IV on  SIL.No_ = IV.[Item No_]  
            and SIL.[PFVertical Component] = IV.[PFVertical Component]
            and SIL.[PFHorizontal Component] = IV.[PFHorizontal Component]  
        left outer join [CAFFA03].[PRODUCCION].[dbo].Caffarena$Salesperson_Purchaser SP on SIL.[PFSalesperson Code] = SP.Code
        right outer join [CAFFA03].[PRODUCCION].[dbo].[Caffarena$Value Entry] VE on SIL.[Document No_] = VE.[Document No_]
        where
        convert(date,SIL.[Posting Date],103) between @FECHA_INICIO and @FECHA_FIN"

    tabla del primer procedure-

    ALTER PROCEDURE [dbo].[sp_DATOS_INFORME_VENTAS_CAFF]


    @FECHA_INICIO NVARCHAR(10),
    @FECHA_FIN NVARCHAR(10)


    AS

    SET NOCOUNT ON;

    BEGIN
        

    DECLARE        
    @TABLA_DATOS TABLE
    (
    [TIPODOC]                        nvarchar(10),
    [Fecha Registro]                nvarchar(200),
    [Nº Documento]                    nvarchar(200),
    [Nº Pedidod]                    nvarchar(200),
    [Nº Documento SII]                nvarchar(200),
    [Tipo Doc legal]                nvarchar(200),
    [Nº documento externo]            nvarchar(200),
    [Venta a Nº Cliente]            nvarchar(200),
    [Nombre Cliente]                nvarchar(200),
    [Customer Group]                nvarchar(200),
    [Cod Vendedor]                    nvarchar(200),
    [Nombre Vendedor]                nvarchar(200),
    [Codigo Producto]                nvarchar(200),
    [Cod Variante]                    nvarchar(200),
    [Descripcion]                    nvarchar(200),
    [Tipo]                            nvarchar(200),
    [Status]                        nvarchar(200),
    [Cantidad]                        nvarchar(200),
    [Precio Venta Excl. Vat]        nvarchar(200),
    [Importe]                        nvarchar(200),
    [Importe IVA incl.]                nvarchar(200),
    [Importe dto Linea]                nvarchar(200),
    [PFCollection]                    nvarchar(200),
    [PFSeason]                        nvarchar(200),
    [PFTheme]                        nvarchar(200),
    [PFBrand]                        nvarchar(200),
    [Product Group Code]            nvarchar(200),
    [Item Category Code]            nvarchar(200),
    [Envio a nombre]                nvarchar(200),
    [Cod Direcc envio cliente]        nvarchar(200),
    [Cod dir envio Cliente]            nvarchar(200),
    [Cod Almancén devol venta IC]    nvarchar(200),
    [Forma de pago]                    nvarchar(200),
    [cod auditoria dev]                nvarchar(200),
    [descripcion2]                    nvarchar(200),
    [Coste Unitario]                nvarchar(200),
    [Costo Unitario]                nvarchar(200),
    [Ultimo costo directo]            nvarchar(200),
    [Nº Copias impresas]            nvarchar(200),
    [Grupo Precio cliente]          nvarchar(200),
    [Importe Costo Real]            nvarchar(200) --nuevo campo

    )

    gracias de antemano

    viernes, 11 de octubre de 2019 16:22

Respuestas

  • Hola pipe silva:

    Tu mensaje parece un poco desordenado.

    Cuando te refieres a la variable de tabla a la que has añadido el campo, esa variable puede estar corriendo simultáneamente en muchas sesiones, puesto que solo le pertenece a la conexión en la que se este ejecutando.

    Por tanto el impedir insertar datos en esa variable tipo tabla no tiene nada que ver, con los tres procedimientos, sino mas bien con que hay algún tipo de error, probablemente, porque no coinciden los tipos de datos.

    Prueba en la insert de la variable de tabla, que no has puesto el código a poner un cast (….columnaDeOrigen as nvarchar(200))

    ALTER PROCEDURE [dbo].[sp_DATOS_INFORME_VENTAS_CAFF]
    
    
    @FECHA_INICIO NVARCHAR(10),
    @FECHA_FIN NVARCHAR(10)
    
    
    AS
    
    SET NOCOUNT ON;
    
    BEGIN
        
    
    DECLARE        
    @TABLA_DATOS TABLE
    (
    [TIPODOC]                        nvarchar(10),
    [Fecha Registro]                nvarchar(200),
    [Nº Documento]                    nvarchar(200),
    ….
    ….
    [Importe Costo Real]            nvarchar(200) --nuevo campo
    );
    
    insert into @tabla_Datos ([TIPODOC]…..
    select 
    …..
    Cast (columna as nvarchar(200))
    from origenDeLosDatos

    Hay una cosa extraña, porque en la primera parte de la sentencia, pones

    insert into TABLA_DATOS

    y eso no es una variable de tabla porque necesita una @, eso es una tabla real.

    viernes, 11 de octubre de 2019 16:48
  •  Buenas tardes Javi.

      Primero que todo gracias por responder. bueno tienes razon aparte de estar desordenado, el problema tal como lo describes era un error con el tipo de dato, pero ahi enlaza con mi siguiente error, tal y como comentas el otro procedure inserta con otra tabla aparte, que tiene el mismo nombre, pero la diferencia era que esta era una tabla normal. En el procedimiento que me causaba el error cambie el tipo de dato y funciono sin problemas.

    Quedo agradecido por su  ayuda.

    viernes, 11 de octubre de 2019 21:05

Todas las respuestas

  • Hola pipe silva:

    Tu mensaje parece un poco desordenado.

    Cuando te refieres a la variable de tabla a la que has añadido el campo, esa variable puede estar corriendo simultáneamente en muchas sesiones, puesto que solo le pertenece a la conexión en la que se este ejecutando.

    Por tanto el impedir insertar datos en esa variable tipo tabla no tiene nada que ver, con los tres procedimientos, sino mas bien con que hay algún tipo de error, probablemente, porque no coinciden los tipos de datos.

    Prueba en la insert de la variable de tabla, que no has puesto el código a poner un cast (….columnaDeOrigen as nvarchar(200))

    ALTER PROCEDURE [dbo].[sp_DATOS_INFORME_VENTAS_CAFF]
    
    
    @FECHA_INICIO NVARCHAR(10),
    @FECHA_FIN NVARCHAR(10)
    
    
    AS
    
    SET NOCOUNT ON;
    
    BEGIN
        
    
    DECLARE        
    @TABLA_DATOS TABLE
    (
    [TIPODOC]                        nvarchar(10),
    [Fecha Registro]                nvarchar(200),
    [Nº Documento]                    nvarchar(200),
    ….
    ….
    [Importe Costo Real]            nvarchar(200) --nuevo campo
    );
    
    insert into @tabla_Datos ([TIPODOC]…..
    select 
    …..
    Cast (columna as nvarchar(200))
    from origenDeLosDatos

    Hay una cosa extraña, porque en la primera parte de la sentencia, pones

    insert into TABLA_DATOS

    y eso no es una variable de tabla porque necesita una @, eso es una tabla real.

    viernes, 11 de octubre de 2019 16:48
  •  Buenas tardes Javi.

      Primero que todo gracias por responder. bueno tienes razon aparte de estar desordenado, el problema tal como lo describes era un error con el tipo de dato, pero ahi enlaza con mi siguiente error, tal y como comentas el otro procedure inserta con otra tabla aparte, que tiene el mismo nombre, pero la diferencia era que esta era una tabla normal. En el procedimiento que me causaba el error cambie el tipo de dato y funciono sin problemas.

    Quedo agradecido por su  ayuda.

    viernes, 11 de octubre de 2019 21:05