none
PROBLEMA SINCRONIZAR TABLA RRS feed

  • Pregunta

  • Buenos días, hice una herramienta para sincronizar tablas, con un trigger.. siempre funciona bien, pero hoy me da un error... y no se muy bien de donde puede venir el problema... las demás tablas las sincroniza bien, pero esta da este error:


    ----------------------------------------------------------------------------------------------
                  COMIENZA PROCESO TRCARLINEASVENTAVIRTUAL 20180831 - 11:16:12
    ----------------------------------------------------------------------------------------------
    Mensaje 102, Nivel 15, Estado 1, Servidor SRVFARMAPARA, L¡nea 1
    Sintaxis incorrecta cerca de ','.


    Supongo que se refererirá algun caracter de la tabla, que no es correcto, pero no encuentro cual, a ver si me podeís ayudar!!

    Adjunto foto de la tabla, muchas gracias!!







    viernes, 31 de agosto de 2018 9:27

Respuestas

  • Hola Sistemas.Farma:

    create table prueba (id int, valor int, valor2 int)
    go
    
    INSERT INTO prueba
    (id,
     valor,
     valor2
    )
    VALUES
    (1,
     1,
     1
    ),
    (1,
     1,
     1
    ),
    (2,
     2,
     2
    ),
    (3,
     3,
     3
    );
    GO
    SELECT *
    FROM prueba;
    GO
    ;WITH cte
         AS (
         SELECT ROW_NUMBER() OVER(PARTITION BY id,
                                               valor ORDER BY id,
                                                              valor) AS fila,
                id,
                valor,
                valor2
         FROM prueba)
         DELETE FROM cte
         WHERE fila > 1;
    	 go
    SELECT *
    FROM prueba;

    Algo así te puede servir.

    Un saludo

    • Marcado como respuesta Sistemas.Farma viernes, 31 de agosto de 2018 13:00
    viernes, 31 de agosto de 2018 12:47
  • AL FINAL, PARA QUE QUEDE CONSTANCIA, LOS HE PODIDO BORRAR ASÍ:

    1) PARA VER LOS VALORES DUPLICADOS:

    SELECT idVENTA, IDNLINEA, count(*)
    FROM dbo.LINEAVENTAVIRTUAL_OLD
    GROUP BY idVENTA, IDNLINEA
    HAVING count(*)>1
    
    

    2) PARA ELIMINAR DUPLICADOS:

    set rowcount 1
    delete from dbo.LINEAVENTAVIRTUAL_OLD
    where idVENTA='1937148' and IDNLINEA='3'

    MUCHAS GRACIAS A JAVI FERNÁNDEZ POR SU AYUDA!!

    UN SALUDO

    • Marcado como respuesta Sistemas.Farma viernes, 31 de agosto de 2018 13:00
    viernes, 31 de agosto de 2018 13:00

Todas las respuestas

  • Hola Sistemas.Farma:

    Si no pones el código del proceso, a priori por la foto es casi imposible ayudarte.

    En la foto solo se observan las comas como separador del campo TS, que si ya lo has efectuado más veces, ….y el "/" del campo Descripción, que de igual modo, si lo has hecho más veces, no parece probable.

    Imaginando,.... si tu ultima columna no devuelves nada y es algo dinámico el código que has hecho, se entienda que es un campo de tipo varchar…. y por tanto la colocación de campos sea errónea..... Es muy difícil, imaginar....

    ¿No puedes hacer el proceso por líneas, o copiar la tabla en otra tabla mediante select * into #tablatemporal from tutabla y luego, eliminar filas, y procesar desde esta #tablatemporal por partes?

    Un saludo

    viernes, 31 de agosto de 2018 9:55
  • Perdona, te adjunto el código!!!

    --=====================================================================================================
    -- TRCARLINEASVENTAVIRTUAL --- "POR GUILLERMO ASIN"
    --=====================================================================================================
    SET NOCOUNT ON
    USE DICCIONARIO
    DECLARE @ERRORCODE int
    DECLARE @NUMRECS int
    DECLARE @NUMINS int
    DECLARE @NUMUPD int
    DECLARE @ESTADO char(3)
    DECLARE @FECHA varchar(8)
    DECLARE @HORA varchar(8)
    DECLARE @MENSAJE char(250)
    DECLARE @SENTENCIACUR nvarchar(3000)
    DECLARE @SENTENCIAINS nvarchar(4000)
    DECLARE @SENTENCIAUPD nvarchar(2000)
    DECLARE @PROCESO varchar(30)
    SET @PROCESO='TRCARLINEASVENTAVIRTUAL'
    
    SELECT @FECHA=CONVERT(VARCHAR(8),GETDATE(),112)
    SELECT @HORA=CONVERT(VARCHAR(8),CURRENT_TIMESTAMP,24)
    SET @MENSAJE=N'              COMIENZA PROCESO ' + @PROCESO + N' ' + @FECHA + ' - ' + @HORA
    PRINT N'----------------------------------------------------------------------------------------------'
    PRINT RTRIM(@MENSAJE)
    PRINT N'----------------------------------------------------------------------------------------------'
    
    DECLARE @ID_VENTA		INTEGER
    DECLARE @ID_LINEA		INTEGER
    DECLARE @CODIGO			VARCHAR(255)
    DECLARE @DESCRIPCION		VARCHAR(255)
    DECLARE @CANTIDAD		INTEGER
    DECLARE @PVP	         	FLOAT
    DECLARE @IMPORTE_BRUTO		FLOAT
    DECLARE @IMPORTE_NETO		FLOAT
    DECLARE @TIPOLINEA		CHAR(1)
    DECLARE @DTO_LINEA		FLOAT
    DECLARE @DTO_OPERACION		FLOAT
    DECLARE @TIPOAPORTACION		CHAR(2)
    
    DECLARE @SID_VENTA		VARCHAR(13)
    DECLARE @SID_LINEA		VARCHAR(13)
    DECLARE @SCODIGO		VARCHAR(102)
    DECLARE @SDESCRIPCION		VARCHAR(102)
    DECLARE @SCANTIDAD		VARCHAR(13)
    DECLARE @SPVP	         	VARCHAR(17)
    DECLARE @SIMPORTE_BRUTO		VARCHAR(17)
    DECLARE @SIMPORTE_NETO		VARCHAR(17)
    DECLARE @STIPOLINEA		VARCHAR(4) --- CAMPO AÑADIDO AL SCINRONIZADOR POR GUILLERMO
    DECLARE @SDTO_LINEA		VARCHAR(17)
    DECLARE @SDTO_OPERACION		VARCHAR(17)
    DECLARE @STIPOAPORTACION	VARCHAR(8) --- CAMPO AÑADIDO AL SINCRONIZADOR POR GUILLERMO
    
    SET @NUMRECS=0
    SET @NUMUPD=0
    SET @NUMINS=0
    
    TRUNCATE TABLE DICCIONARIO.dbo.DIC_LINEASVENTAVIRTUAL;
    
    SET @SENTENCIACUR = 'declare PROVECUR Cursor for SELECT ' 
    SET @SENTENCIACUR = @SENTENCIACUR + 'IdVenta, IdNLinea, Codigo, Descripcion, Cantidad, PVP, ImporteBruto,'
    SET @SENTENCIACUR = @SENTENCIACUR + 'ImporteNeto, TipoLinea, DescuentoLinea, DescuentoOpera, TipoAportacion '
    SET @SENTENCIACUR = @SENTENCIACUR + 'FROM INTERMEDIA.dbo.LINEAVENTAVIRTUAL_OLD ORDER BY TS'
    
    EXEC @ERRORCODE=sp_executesql @SENTENCIACUR
        IF @ERRORCODE <> 0 
          BEGIN
            PRINT N'---------------------------------------ATENCION----------------------------------------------'
            PRINT N'           ERROR EN DECLARE CURSOR PARA LINEASVENTAVIRTUAL_OLD'
            PRINT N'---------------------------------------ATENCION----------------------------------------------'
            RAISERROR(50003,1,1)
              RETURN
          END
    
    OPEN PROVECUR
    
    FETCH NEXT FROM PROVECUR INTO @ID_VENTA, @ID_LINEA, @CODIGO, @DESCRIPCION, @CANTIDAD, @PVP, @IMPORTE_BRUTO, @IMPORTE_NETO, @TIPOLINEA, @DTO_LINEA, @DTO_OPERACION, @TIPOAPORTACION
    
    WHILE @@FETCH_STATUS = 0
      BEGIN
    --     -- La insert debe de componerse de modo dinámico. Para los campos NULL, no se puede especificar este valor en la cadena
    --     -- porque es palabra reservada. Como no encuentro otra forma, realizo un filtro previo para los campos que admiten NULL.
    --     -------------------------------------------------------------------------------------------------------------------------
    
    SET @SID_VENTA= RTRIM(CAST(@ID_VENTA AS CHAR(11)))
    SET @SID_LINEA= RTRIM(CAST(@ID_LINEA AS CHAR(11)))
    SET @SCODIGO = '''' + RTRIM(@CODIGO) + ''''
    IF @DESCRIPCION IS NULL BEGIN SET @SDESCRIPCION='NULL' END ELSE BEGIN SET @SDESCRIPCION='''' + RTRIM(@DESCRIPCION) + '''' END
    SET @SCANTIDAD= RTRIM(CAST(@CANTIDAD AS CHAR(11)))
    SET @SPVP= RTRIM(CAST(@PVP as char(15)))
    SET @SIMPORTE_BRUTO= RTRIM(CAST(@IMPORTE_BRUTO as char(15)))
    SET @SIMPORTE_NETO= RTRIM(CAST(@IMPORTE_NETO as char(15)))
    ---SET @STIPOLINEA= RTRIM(CAST(@TIPOLINEA as char(15)))
    IF @TIPOLINEA IS NULL BEGIN SET @STIPOLINEA='NULL' END ELSE BEGIN SET @STIPOLINEA='''' + RTRIM(@TIPOLINEA) + '''' END
    SET @SDTO_LINEA= RTRIM(CAST(@DTO_LINEA as char(15)))
    SET @SDTO_OPERACION= RTRIM(CAST(@DTO_OPERACION as char(15)))
    IF @TIPOAPORTACION IS NULL BEGIN SET @STIPOAPORTACION='NULL' END ELSE BEGIN SET @STIPOAPORTACION='''' + RTRIM(@TIPOAPORTACION) + '''' END
    
    ---- Comprobamos si el id_venta en curso existe en DIC_LINEASVENTAVIRTUAL
    ---- Si existe se hace UPDATE de todos los campos menos la clave para ahorrar tiempo
    ---- Si no existe se inserta todo el registro
         SELECT @NUMRECS=COUNT(*)
           FROM DICCIONARIO.dbo.DIC_LINEASVENTAVIRTUAL
          WHERE ID_VENTA=@ID_VENTA
            AND ID_LINEA=@ID_LINEA
         IF @NUMRECS = 0
           BEGIN
    	 SET @SENTENCIAINS = 'INSERT INTO DICCIONARIO.dbo.DIC_LINEASVENTAVIRTUAL VALUES ('
             SET @SENTENCIAINS = @SENTENCIAINS + @SID_VENTA + ',' + @SID_LINEA + ',' + @SCODIGO + ',' + @SDESCRIPCION + ','
             SET @SENTENCIAINS = @SENTENCIAINS + @SCANTIDAD + ',' + @SPVP + ',' + @SIMPORTE_BRUTO + ',' + @SIMPORTE_NETO + ','
    	 SET @SENTENCIAINS = @SENTENCIAINS + @STIPOLINEA + ',' + @SDTO_LINEA + ',' + @SDTO_OPERACION  + ',' + @STIPOAPORTACION
    	 SET @SENTENCIAINS = @SENTENCIAINS + ')'
             EXEC @ERRORCODE=sp_executesql @SENTENCIAINS
    	 IF @ERRORCODE <> 0 
               BEGIN
                  PRINT N'---------------------------------------ATENCION----------------------------------------------'
                  PRINT N'           ERROR EN INSERT EN DIC_LINEASVENTAVIRTUAL'
                  PRINT N'---------------------------------------ATENCION----------------------------------------------'
                  RAISERROR(50003,1,1)
                  RETURN
               END
    	 SET @NUMINS=@NUMINS + 1
           END
         ELSE
           BEGIN
    	 SET @SENTENCIAUPD = 'UPDATE DICCIONARIO.dbo.DIC_LINEASVENTAVIRTUAL SET '
             SET @SENTENCIAUPD = @SENTENCIAUPD + 'CODIGO = ' + @SCODIGO + ','
             SET @SENTENCIAUPD = @SENTENCIAUPD + ',DESCRIPCION = ' + @SDESCRIPCION  
             SET @SENTENCIAUPD = @SENTENCIAUPD + ',CANTIDAD = ' + @SCANTIDAD 
             SET @SENTENCIAUPD = @SENTENCIAUPD + ',PVP = ' + @SPVP  
             SET @SENTENCIAUPD = @SENTENCIAUPD + ',IMPORTE_BRUTO = ' + @SIMPORTE_BRUTO  
             SET @SENTENCIAUPD = @SENTENCIAUPD + ',IMPORTE_NETO = ' + @SIMPORTE_NETO 
             SET @SENTENCIAUPD = @SENTENCIAUPD + ',TIPOLINEA = ' + @STIPOLINEA  	
             SET @SENTENCIAUPD = @SENTENCIAUPD + ',DTO_LINEA = ' + @SDTO_LINEA  
             SET @SENTENCIAUPD = @SENTENCIAUPD + ',DTO_OPERACION = ' + @SDTO_OPERACION 
           	 SET @SENTENCIAUPD = @SENTENCIAUPD + ',TIPOAPORTACION = ' + @STIPOAPORTACION 
             SET @SENTENCIAUPD = @SENTENCIAUPD + ' WHERE ID_VENTA = ' + @SID_VENTA
             SET @SENTENCIAUPD = @SENTENCIAUPD + ' AND ID_LINEA = ' + @SID_LINEA
    
             EXEC @ERRORCODE=sp_executesql @SENTENCIAUPD
    	 IF @ERRORCODE <> 0 
               BEGIN
                  PRINT N'---------------------------------------ATENCION----------------------------------------------'
                  PRINT N'           ERROR EN UPDATE EN DIC_LINEASVENTAVIRTUAL'
                  PRINT N'---------------------------------------ATENCION----------------------------------------------'
                  RAISERROR(50003,1,1)
                  RETURN
               END
    	 SET @NUMUPD=@NUMUPD + 1
           END
         FETCH NEXT FROM PROVECUR INTO @ID_VENTA, @ID_LINEA, @CODIGO, @DESCRIPCION, @CANTIDAD, @PVP, @IMPORTE_BRUTO, @IMPORTE_NETO, @TIPOLINEA, @DTO_LINEA, @DTO_OPERACION, @TIPOAPORTACION
      END
    CLOSE PROVECUR 
    DEALLOCATE PROVECUR
    
    
    PRINT N'           TRATADOS     ' + CAST((@NUMUPD+@NUMINS) as char(10)) + N' REGISTROS'
    PRINT N'           INSERTADOS   ' + CAST(@NUMINS as char(10)) + N' REGISTROS'
    PRINT N'           ACTUALIZADOS ' + CAST(@NUMUPD as char(10)) + N' REGISTROS'
    SELECT @HORA=CONVERT(time,CURRENT_TIMESTAMP)
    PRINT RTRIM(CAST(@HORA AS char(8))) + N' - EJECUCION DE ' + @PROCESO + ' CORRECTA '
    PRINT N'-------------------------------------------------------------------------------------'
    
    GO
    

    viernes, 31 de agosto de 2018 10:26
  • Puedes pegar el script de creación de dbo.DIC_LINEASVENTAVIRTUAL

    Porque como hay datos duplicados en idVenta e idNLinea, quizá se escapa a mi lógica, y así para saber con que restricciones se cuenta en destino.

    Saludos

    viernes, 31 de agosto de 2018 10:48
  • USE DICCIONARIO
    GO
    
    SET ANSI_NULLS ON
    GO
    
    SET QUOTED_IDENTIFIER ON
    GO
    
    CREATE TABLE DICCIONARIO.dbo.DIC_LINEASVENTAVIRTUAL
       (
        ID_VENTA			INTEGER		NOT NULL,
        ID_LINEA			INTEGER		NOT NULL,
        CODIGO			CHAR(255)	NOT NULL,
        DESCRIPCION			VARCHAR(255)	NULL,
        CANTIDAD			INTEGER		NOT NULL,
        PVP	         		FLOAT		NOT NULL,
        IMPORTE_BRUTO		FLOAT		NOT NULL,
        IMPORTE_NETO		FLOAT		NOT NULL,
        TIPOLINEA			CHAR(1)		NOT NULL,
        DTO_LINEA			FLOAT		NULL,
        DTO_OPERACION		FLOAT		NULL,
        TIPOAPORTACION		CHAR(2)		NULL,
        
     CONSTRAINT PK_DIC_LINEASVENTAVIRTUAL PRIMARY KEY CLUSTERED (ID_VENTA,ID_LINEA ASC))
    
    GO

    viernes, 31 de agosto de 2018 11:34
  • Hola:

    Estuve analizando tu código, y creo que tienes puntos de mejora. Como no tengo la estructura completa de tus tablas, con la misma idea, te he realizado un MERGE

    Pruébalo, que te solucionará muchos problemas, es mucho más rápido y eficaz.

    CREATE DATABASE INTERMEDIA;
    GO
    USE INTERMEDIA;
    GO
    CREATE TABLE LINEAVENTAVIRTUAL_OLD
    (TS           INT IDENTITY(1, 1),
     IdVenta      INT,
     IdNLinea     INT,
     Codigo       VARCHAR(100),
     Descripcion  VARCHAR(100),
     Cantidad     FLOAT,
     PVP          FLOAT,
     ImporteBruto FLOAT
    );
    GO
    CREATE DATABASE DICCIONARIO;
    GO
    USE DICCIONARIO;
    GO
    CREATE TABLE DIC_LINEASVENTAVIRTUAL
    (ID           INT IDENTITY(1000, 1),
     SENTENCIA    INT,
     IDVENTA      INT,
     IDLINEA      INT,
     CODIGO       VARCHAR(100),
     DESCRIPCION  VARCHAR(100),
     CANTIDAD     FLOAT,
     PVP          FLOAT,
     IMPORTEBRUTO FLOAT,
     TIPO         INT
    );
    GO
    USE INTERMEDIA;
    GO
    INSERT INTO LINEAVENTAVIRTUAL_OLD
    (IdVenta,
     IdNLinea,
     Codigo,
     Descripcion,
     Cantidad,
     PVP,
     ImporteBruto
    )
    VALUES
    (1938249,
     1,
     '661531',
     'DESCRIPCION',
     1,
     61.19,
     4.23
    ),
    (1938249,
     2,
     '654775',
     'DESCRIPCION',
     1,
     32.72,
     3.86
    ),
    (1938249,
     3,
     '750489',
     'DESCRIPCION',
     1,
     33.19,
     7.22
    ),
    (1938249,
     4,
     'VALE',
     'DESCRIPCION',
     -1,
     1.19,
     4.25
    ),
    (1938062,
     1,
     'VALE',
     'DESCRIPCION',
     -1,
     41.129,
     4.24
    ),
    (1938160,
     1,
     'VALE',
     'DESCRIPCION',
     1,
     1.1339,
     4.04
    ),
    (1938932,
     1,
     'VALE',
     'DESCRIPCION',
     1,
     36.29,
     0.24
    ),
    (1938932,
     2,
     'VALE',
     'DESCRIPCION',
     1,
     56.12,
     9.75
    );
    GO
    USE DICCIONARIO;
    GO
    DECLARE @SENTENCIA INT= 0; 
    
    /* IMAGINATE QUE LO METES EN UN PROCEDURE Y LE PASAS UN PARAMETRO */
    
    MERGE DIC_LINEASVENTAVIRTUAL AS TARGET
    USING
    (
        SELECT C.IdVenta,
               C.IdNLinea,
               C.Codigo,
               C.Descripcion,
               CASE
                   WHEN C.Cantidad IS NULL
                   THEN 0
                   ELSE C.CANTIDAD
               END, 
    
    /*OBSERVA COMO SE PUEDEN TRATAR LOS NULOS */
    
               C.PVP,
               C.ImporteBruto
        FROM [intermedia].DBO.LINEAVENTAVIRTUAL_OLD C
        WHERE C.TS > 0
     
    /* EL ORIGEN DE LOS DATOS ES UNA SELECT */
    
    ) AS SOURCE(IDVENTA, IDNLINEA, CODIGO, DESCRIPCION, CANTIDAD, PVP, IMPBRUTO)
    ON(TARGET.IDVENTA = SOURCE.IDVENTA
       AND TARGET.IDLINEA = SOURCE.IdNLinea) 
    
    /*RELACIONO ORIGEN Y DESTINO POR EL ID Y LA LINEA*/
    
        WHEN MATCHED 
    
    /*CUANDO EXISTA EL REGISTRO,*/
    
        THEN UPDATE SET 
    	
    /* OJO QUE EL NOMBRE DE LA IZQUIERDA TIENE QUE SER EL NOMBRE DE LA COLUMNA DE LA TABLA DE DESTINO */
    
                        SENTENCIA = @SENTENCIA,
                        CODIGO = SOURCE.CODIGO,
                        DESCRIPCION = SOURCE.DESCRIPCION,
                        CANTIDAD = SOURCE.CANTIDAD,
                        PVP = SOURCE.PVP,
                        IMPORTEBRUTO = SOURCE.IMPBRUTO, 
    
    /*observa que ya utilizo el alias de columna y no su nombre real */
    
                        TIPO = 1
        WHEN NOT MATCHED 
    
    /* SI NO EXISTE INSERTO */
    
        THEN
          INSERT(Sentencia,
                 IdVenta,
                 IdLinea,
                 Codigo,
                 Descripcion,
                 Cantidad,
                 PVP,
                 ImporteBruto,
                 Tipo)
          VALUES
    (@sentencia,
     SOURCE.IDVENTA,
     SOURCE.IDNLINEA,
     SOURCE.CODIGO,
     SOURCE.DESCRIPCION,
     SOURCE.CANTIDAD,
     SOURCE.PVP,
     SOURCE.impbruto,
     0
    );
    GO
    DELETE FROM DIC_LINEASVENTAVIRTUAL
    WHERE id BETWEEN 1000 AND 1003; 
    
    /*elimino los 4 primeros registros, y modifico el 5 de la tabla de origen */
    
    UPDATE [INTERMEDIA].dbo.[LINEAVENTAVIRTUAL_OLD]
      SET
          Descripcion = 'MODIFICADO'
    WHERE Codigo = '654775';
    GO
    	
    /*ejecuto de nuevo el merge completo */
    
    DECLARE @SENTENCIA INT= 0; 
    
    /* IMAGINATE QUE LO METES EN UN PROCEDURE Y LE PASAS UN PARAMETRO */
    
    MERGE DIC_LINEASVENTAVIRTUAL AS TARGET
    USING
    (
        SELECT C.IdVenta,
               C.IdNLinea,
               C.Codigo,
               C.Descripcion,
               CASE
                   WHEN C.Cantidad IS NULL
                   THEN 0
                   ELSE C.CANTIDAD
               END, 
    
    /*OBSERVA COMO SE PUEDEN TRATAR LOS NULOS */
    
               C.PVP,
               C.ImporteBruto
        FROM [intermedia].DBO.LINEAVENTAVIRTUAL_OLD C
        WHERE C.TS > 0
     
    /* EL ORIGEN DE LOS DATOS ES UNA SELECT */
    
    ) AS SOURCE(IDVENTA, IDNLINEA, CODIGO, DESCRIPCION, CANTIDAD, PVP, IMPBRUTO)
    ON(TARGET.IDVENTA = SOURCE.IDVENTA
       AND TARGET.IDLINEA = SOURCE.IdNLinea) 
    
    /*RELACIONO ORIGEN Y DESTINO POR EL ID Y LA LINEA*/
    
        WHEN MATCHED 
    
    /*CUANDO EXISTA EL REGISTRO,*/
    
        THEN UPDATE SET 
    	
    /* OJO QUE EL NOMBRE DE LA IZQUIERDA TIENE QUE SER EL NOMBRE DE LA COLUMNA DE LA TABLA DE DESTINO */
    
                        SENTENCIA = @SENTENCIA,
                        CODIGO = SOURCE.CODIGO,
                        DESCRIPCION = SOURCE.DESCRIPCION,
                        CANTIDAD = SOURCE.CANTIDAD,
                        PVP = SOURCE.PVP,
                        IMPORTEBRUTO = SOURCE.IMPBRUTO, 
    
    /*observa que ya utilizo el alias de columna y no su nombre real */
    
                        TIPO = 1
        WHEN NOT MATCHED 
    
    /* SI NO EXISTE INSERTO */
    
        THEN
          INSERT(Sentencia,
                 IdVenta,
                 IdLinea,
                 Codigo,
                 Descripcion,
                 Cantidad,
                 PVP,
                 ImporteBruto,
                 Tipo)
          VALUES
    (@sentencia,
     SOURCE.IDVENTA,
     SOURCE.IDNLINEA,
     SOURCE.CODIGO,
     SOURCE.DESCRIPCION,
     SOURCE.CANTIDAD,
     SOURCE.PVP,
     SOURCE.impbruto,
     0
    );
    GO
    SELECT *
    FROM DIC_LINEASVENTAVIRTUAL;

    He puesto en la misma estructura, las variantes de incluir una variable y tener diferentes columnas. Espero te aporte.

    Ya comentas.

    Saludos

    viernes, 31 de agosto de 2018 11:37
  • Vale, entiendo, el problema son los valores repetidos, es por un update manual que alguien hizo. Me revisaré el código, e implementare.

    Mi duda ahora es, como puedo borrar esos registros duplicados, si son exactamente iguales?

    GRACIAS!!

    viernes, 31 de agosto de 2018 12:38
  • Hola Sistemas.Farma:

    create table prueba (id int, valor int, valor2 int)
    go
    
    INSERT INTO prueba
    (id,
     valor,
     valor2
    )
    VALUES
    (1,
     1,
     1
    ),
    (1,
     1,
     1
    ),
    (2,
     2,
     2
    ),
    (3,
     3,
     3
    );
    GO
    SELECT *
    FROM prueba;
    GO
    ;WITH cte
         AS (
         SELECT ROW_NUMBER() OVER(PARTITION BY id,
                                               valor ORDER BY id,
                                                              valor) AS fila,
                id,
                valor,
                valor2
         FROM prueba)
         DELETE FROM cte
         WHERE fila > 1;
    	 go
    SELECT *
    FROM prueba;

    Algo así te puede servir.

    Un saludo

    • Marcado como respuesta Sistemas.Farma viernes, 31 de agosto de 2018 13:00
    viernes, 31 de agosto de 2018 12:47
  • AL FINAL, PARA QUE QUEDE CONSTANCIA, LOS HE PODIDO BORRAR ASÍ:

    1) PARA VER LOS VALORES DUPLICADOS:

    SELECT idVENTA, IDNLINEA, count(*)
    FROM dbo.LINEAVENTAVIRTUAL_OLD
    GROUP BY idVENTA, IDNLINEA
    HAVING count(*)>1
    
    

    2) PARA ELIMINAR DUPLICADOS:

    set rowcount 1
    delete from dbo.LINEAVENTAVIRTUAL_OLD
    where idVENTA='1937148' and IDNLINEA='3'

    MUCHAS GRACIAS A JAVI FERNÁNDEZ POR SU AYUDA!!

    UN SALUDO

    • Marcado como respuesta Sistemas.Farma viernes, 31 de agosto de 2018 13:00
    viernes, 31 de agosto de 2018 13:00
  • De nada.
    viernes, 31 de agosto de 2018 13:05