none
sql server 2014 express actulizar campo RRS feed

  • Pregunta

  • buenas noches 

    programadores estoy en sql server 2014 estoy tratando de actulizar un campo de una tabla 

    tabla destino Ventas campo afectar IdUsuario 

    tabla origen Caja  campo IdCajero 

    SELECT [IdCaja]
          ,[Fecha]
          ,[Importe]
          ,[IdTipoMovimiento]
          ,[IdConcepto]
          ,[IdTipoDocumento]
          ,[IdCajero]
          ,[IdMediodePago]
          ,[NumDocumento]
          ,[IdTurno]
          ,[IdTPV]
          ,[Entregado]
          ,[Vuelto]
          ,[FechaReg]
      FROM [dbo].[CAJA]

    trate con esta sentencia pero no hace nada 

    UPDATE Ventas
    SET   Ventas.Idusuario = CAJA.IdCajero
    FROM   Ventas
           INNER JOIN CAJA
             ON Ventas.Idusuario = CAJA.IdCajero

    me muestra este mensaje no hace nada no actuliza el campo Idusurio  es de tipo int null

    (816 filas afectadas)

    martes, 12 de febrero de 2019 4:41

Todas las respuestas

  • Hola djnilo:

    ¿Estas seguro de lo que estas solicitando al sql?

    Porque no pruebas primero tu sentencia antes de mandarle hacer una update.

    select v.idUsuario, c.idcajero, v.IdVenta, c.idcaja
    from ventas v inner join caja c
    on v.idUsuario = c.idcajero

    Extraes la información en una select con las dos columnas (origen, destino) y sus ids respectivos, y observas.

    Si el motor te dice que 816 filas afectadas, es por algo. Eso de que no hace nada no es correcto. Obviamente los resultados no son los que tu esperas.

    • Propuesto como respuesta Pedro Alfaro martes, 12 de febrero de 2019 16:21
    martes, 12 de febrero de 2019 5:48
  • Javi Fernandez gracias por responder efectivamente no trae información

    el campo idUsuario de ventas  esta vacio 

    solo quiero copiar la informacion que esta en la tabla caja campo idcajero a tabla ventas campo idusuario

    pero no funciona error . por la fechas que no puede ser nulas

    UPDATE Ventas
    SET   Ventas.Idusuario = CAJA.IdCajero
    FROM   Ventas
           INNER JOIN CAJA
             ON Ventas.Idusuario = CAJA.IdCajero



    • Editado djnilo martes, 12 de febrero de 2019 21:54
    martes, 12 de febrero de 2019 21:45
  • Hola djnilo,

    No son las fechas. Una update es un cambio de una columna en una fila existente. 

    El registro ya tiene que existir. Y si existe, ya tiene fecha, porque en la definición de la tabla dice que tiene que tener un valor.

    martes, 12 de febrero de 2019 22:07
  • Hola djnilo:

    Fijate en la sentencia.

    UPDATE Ventas
    SET   Ventas.Idusuario = CAJA.IdCajero
    FROM   Ventas
           INNER JOIN CAJA
             ON Ventas.Idusuario = CAJA.IdCajero

    Le hemos dicho Actualiza Ventas

    Pon en Ventas.IdUsuario lo que tenga Caja.IdCajero.

    De la tabla ventas que esta relacionada con la tabla Caja.

    donde Ventas.idUsuario (ojo que este campo es nuevo con valores nulos) = caja.idCajero.

    Resultado no cambia nada.

    La relación entre ventas y caja, no puede ser esa.

    No veo muy clara las dos tablas, pero me supongo que la relación pueda ser por idTipoDocumento, numDocumento idTpv y fecha (ya que no veo así nada que las relacione)

    miércoles, 13 de febrero de 2019 5:40
  • graciar por darte el tiempo  de resporder Javi Fernadez

    SELECT [IdVenta]
          ,[Fecha]
          ,[IdTipoDocumento]
          ,[NumDocumento]
          ,[IdCliente]
          ,[IdFormaPago]
          ,[PorcentajeIVA]
          ,[SubTotal]
          ,[Descuento]
          ,[IVA]
          ,[Total]
          ,[Estado]
          ,[IdTurno]
          ,[IdTPV]
          ,[Idotro]
          ,[FechaReg]
      FROM [dbo].[Ventas]
    GO
    ELECT [IdCaja]
          ,[Fecha]
          ,[Importe]
          ,[IdTipoMovimiento]
          ,[IdConcepto]
          ,[IdTipoDocumento]
          ,[IdCajero]
          ,[IdMediodePago]
          ,[NumDocumento]
          ,[IdTurno]
          ,[IdTPV]
          ,[Entregado]
          ,[Vuelto]
          ,[FechaReg]
      FROM [dbo].[CAJA]
    GO
     

    se me ocurio crear una vista para que trajiera los datos 

    cree esta vista

    create view vista_datos
    as
    select C.IdCaja,C.IdCajero,C.NumDocumento
    from Ventas V
    inner join CAJA C on V.NumDocumento = C.NumDocumento;

    pero resulta que tabla caja tiene 829 resultados y tabla ventas tiene  resultado tiene 816 datos

    select * from vista_datos en la vista_datos trae 829 datos

    primero deje en cero todos los idUsuario 

    UPDATE Ventas
    SET   Ventas.IdUsuario = 0

    ahora a actulizar el idusuario con la otra tabla caja

    UPDATE Ventas
    SET   Ventas.IdUsuario = vista_datos.IdCajero
    FROM   Ventas
           INNER JOIN vista_datos
             ON Ventas.NumDocumento = vista_datos.NumDocumento

    con esto me actulizo el campo idUsuario  pero como en ventas son menos columas se desordena el orden que tiene caja no se como tener el mismo orden

    829 campos Caja  816 Ventas hay forma de registrigir la cantidad a actulizar no se con algun where

    entonces trate actulizar los datos pero no tira mismo orden idUsuario = idCajero

    lo ultimo que se me ocurre que me eches una mano por anydesk


    • Editado djnilo miércoles, 13 de febrero de 2019 18:53
    miércoles, 13 de febrero de 2019 18:51
  • Hola djnilo:

    Vamos a hacerlo de otro modo, mas simple. Haz una copia de tu base de datos.Utiliza un servicio que puedes utilizar para envios de archivos inferiores a 2Gb, gratis, y sin registros.

    https://wetransfer.com/

    En la cuenta del destinatario pones apuntessql@ y luego gmail.com (solo lo que va en negrita)

    A la recepción del archivo que puedes enviar zipeado y si quieres con password, te contestare, que lo he recibido y luego te avisaré cuando lo tenga.

    • Propuesto como respuesta Pedro Alfaro miércoles, 13 de febrero de 2019 21:12
    miércoles, 13 de febrero de 2019 19:37