none
Sentencia UPDATE de tabla con dependencias RRS feed

  • Pregunta

  • Buenos días a tod@s

    Quiero actualizar una tabla con dependencias en tablas, procedimientos y funciones.

    Quisiera saber si puedo evitar pasar por esas dependencias o darles yo misma un valor en retorno.

    Gracias de antemano. Un saludo

    Mónica.

    miércoles, 30 de noviembre de 2016 8:25

Respuestas

  • Allí tienes el posible culpable, pero habría que revisarlo a fondo para ver donde falla.  Si tienes donde hacer pruebas puedes deshabilitar el trigger y hacer la operación para verificar que definitivamente el trigger es el problema:

    Disable Trigger Articulos_SyncIU ON Articulos

    y luego reactivarlo con

    Enable Trigger Articulos_SyncIU ON Articulos

    En caso de demostrarse que es el trigger te tocará revisar los procedimientos GEN_ProSyncProcess y GEN_ProSyncMetadataInfo

     
    • Marcado como respuesta Mónica8 jueves, 1 de diciembre de 2016 10:03
    jueves, 1 de diciembre de 2016 8:25

Todas las respuestas

  • Que tenga dependencias no evita que actualices valores.  Puedes explicar mas concretamente lo que quieres hacer?.
    miércoles, 30 de noviembre de 2016 8:31
  • Hola Anibal

    El problema es que creo que entra en alguna dependencia que no me deja realizar cualquier actualización, da siempre el mismo error.

    Con una copia de la tabla no tengo problema, pero en la original imposible.

    En las dependencias hay funciones y procedimientos que cogen el id. de usuario que ha entrado en el programa, fecha actual, fecha modificación..... y ese es el error que me da tipo timestamp. asigno uno de ese tipo y tambien da error.

    Quisiera saber como evitar que entre en cualquier relación de dependencia, o como asignar yo el valor a cada procedimiento o función.

    No se si he podido explicarme mejor.

    Un saludo

    Mónica.

    miércoles, 30 de noviembre de 2016 8:42
  • Las relaciones siempre se van a verificar en forma automática.  Puedes colocar el error que te está dando?
    miércoles, 30 de noviembre de 2016 8:54
  • Hola de nuevo esta es la instruccion que pongo

    update CYA.dbo.Articulos
    SET FechaAlta = GETDATE()
    , HistoricoTarifa= tarifa.DTO
    ,PrecioVenta=tarifa.[TARIFA 2016]
    ,MarcaProducto=tarifa.[MARCA PRODUCTO]
    ,CodigoProveedor=tarifa.[COD PROVEEDOR]
    FROM CYA.dbo.Articulos articulos, CYA.dbo.[TARIFA DEFINITIVA CYA 2016] tarifa
    where articulos.CodigoArticulo=tarifa.CODIGO
    and tarifa.[MARCA PRODUCTO] is not null
    and tarifa.[COD PROVEEDOR] is not null
    and tarifa.DTO is not null

    Error que me da:

    Mens. 242, Nivel 16, Estado 3, Línea 1
    La conversión del tipo de datos varchar en datetime produjo un valor fuera de intervalo.
    Se terminó la instrucción.

    Gracias de nuevo.

    miércoles, 30 de noviembre de 2016 8:58
  • Es correcto, no parece que el problema sea esta sentencia asumiendo que el único campo de fecha sea FechaAlta, ¿puedes verificar si la tabla Articulos tiene algún trigger de actualización asociado?
    miércoles, 30 de noviembre de 2016 10:10
  • Huyy, no se que es eso. como puedo ver los trigger de actualización asociado? en las dependencias?.

    Gracias de nuevo, esta siendo muy amable. disculpa mi ignorancia.

    miércoles, 30 de noviembre de 2016 10:38
  • Puedes buscarlos usando sql server management studio expandiendo la subcarpeta "Tables" de tu base de datos y luego expandiendo la tabla "Articulos" y  luego la carpeta "Triggers" o puedes buscarlos con un Select:

    select T.Name, O.Name from sys.objects O
    inner join Sys.Tables T on O.parent_object_id=T.object_id
    where O.type='TR' AND T.Name='Articulos'

    miércoles, 30 de noviembre de 2016 10:59
  • hola Anibal

    me han salido dos:

    Name Name

    Articulos Articulos_SyncIU
    Articulos Articulos_SyncDelete

    Solo encuentro la tabla Articulos_Sync no encuentro SyncIU, ni SyncDelete.

    GRacias

    miércoles, 30 de noviembre de 2016 11:30
  • Ahora hay que averiguar lo que hace el trigger de update, puedes verlo ejecutando esta sentecia:

    Sp_HelpText 'Articulos_SyncIU'

    miércoles, 30 de noviembre de 2016 12:12
  • Buenos días Anibal

    El trigger hace esto:

    Text
    CREATE TRIGGER Articulos_SyncIU ON Articulos AFTER INSERT, UPDATE   
        AS   
        BEGIN   
         SET NOCOUNT ON;   
           
         DECLARE @AppId AS INT   
           
         SET @AppId = 0   
           
         SELECT @AppId = sysAppId FROM SpidControlSync   
         WHERE HostProcess = dbo.host_id_sage() AND sysHostName = dbo.host_name_sage()    
         IF @AppId < 0   
          BEGIN   
           RETURN   
          END  
            
          
          DECLARE @id uniqueidentifier  
          DECLARE @idPadre uniqueidentifier  
          DECLARE @linkId uniqueidentifier       
          DECLARE @oldlinkId uniqueidentifier            
          DECLARE @tick int  
          DECLARE @codigoEmpresa int  
          DECLARE @modifiedDate datetime  
          DECLARE @accion VarChar(1)  
          DECLARE @fechaRegistro DATETIME  
               
          SET @tick = 1 -- by default  
             
         
          IF EXISTS(SELECT * FROM Inserted) AND EXISTS(SELECT * FROM Deleted) BEGIN  
           SET @accion = 'U'  
          END ELSE BEGIN  
           SET @accion = 'I'  
          END   
             
          DECLARE cur_Inserted CURSOR FOR          
          SELECT Inserted.IdArticulo, ci.sysLinkId, ci.sysModifiedDate , Inserted.CodigoEmpresa  FROM Inserted LEFT JOIN Articulos_Sync ci on Inserted.IdArticulo=ci.sysGuidRegistro    
          OPEN cur_Inserted  
          FETCH NEXT FROM cur_Inserted INTO  @id, @linkId, @modifiedDate, @codigoEmpresa   
          WHILE @@FETCH_STATUS = 0     
          BEGIN   
                                                                                                                    IF @accion = 'U' AND (@linkId = '00000000-0000-0000-0000-000000000000' OR @linkId IS NULL) BEGIN  
            SET @linkId = @id  
           END  
           -- Call common SYNC Process PROC  
           EXEC  GEN_ProSyncProcess @appid,   
                 @tick output,  
                 'Articulos',  
                 @modifiedDate output,  
                 @fechaRegistro output  
             
           -- UPDATE SYNC columns on ClientesGCRMIntegration table.   
           EXEC GEN_ProSyncMetadataInfo @appID,  
                   @tick,  
                   @modifiedDate,  
                   'Articulos',  
                   'Articulos_Sync',  
                   @id,  
                   'SysGuidRegistro',  
                   @accion,  
                   @fechaRegistro,@codigoEmpresa,@linkId  
           FETCH NEXT FROM cur_Inserted INTO  @id, @linkId, @modifiedDate, @codigoEmpresa END     
           CLOSE cur_Inserted  
           DEALLOCATE cur_Inserted   
            
                 
        END

    Perdona la tardanza. Solo puedo usar SQL por las mañanas. Disculpa.

    Un saludo,

    Mónica.

    jueves, 1 de diciembre de 2016 7:23
  • Allí tienes el posible culpable, pero habría que revisarlo a fondo para ver donde falla.  Si tienes donde hacer pruebas puedes deshabilitar el trigger y hacer la operación para verificar que definitivamente el trigger es el problema:

    Disable Trigger Articulos_SyncIU ON Articulos

    y luego reactivarlo con

    Enable Trigger Articulos_SyncIU ON Articulos

    En caso de demostrarse que es el trigger te tocará revisar los procedimientos GEN_ProSyncProcess y GEN_ProSyncMetadataInfo

     
    • Marcado como respuesta Mónica8 jueves, 1 de diciembre de 2016 10:03
    jueves, 1 de diciembre de 2016 8:25
  • Hola

    He deshabilidato TRIGGER, he realizado UPDATE todo OK y he vuelto a activar el TRIGGER. 

    He probado botón de añadir OK, eliminar OK, información OK.

    Parece que todo va bien, un poco mas lento me ha parecido.

    Tendría que preocuparme?

    Ha sido una gran ayuda. Muchas gracias. Que dios te bendiga.

    jueves, 1 de diciembre de 2016 8:46
  • Que bueno que se haya resuelto, cuando tengas mas tiempo sería por supuesto bueno investigar mas el trigger.

     No olvides cerrar la pregunta.

    Saludos

    jueves, 1 de diciembre de 2016 9:50
  • Huyy no se como se cierra. Disculpa.

    Un saludo,

    Mónica

    jueves, 1 de diciembre de 2016 10:05