SQL Server - añadir años con date add a datos entrantes

 
Vista:
sin imagen de perfil

añadir años con date add a datos entrantes

Publicado por javier (9 intervenciones) el 28/12/2016 13:06:06
Buenos días, me he encontrado un problema grave en los programas enlazados a la base de datos, para solucionarlo la única manera que se me ha ocurrido es retrasar la fecha de todos los ordenadores conectados a la base de datos 5 años (pasaría de 2017 a 2012). Pero sin embargo los datos que almacene la base de datos deben estar en el año vigente, en este caso 2017, por lo que necesito que a todo dato que le entre automáticamente le sume 5 años en las columnas necesarias, y de igual manera debo sumarle 5 años a la fecha actual del servidor sql. He probado el siguiente código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
CREATE TRIGGER dbo.fechascob
      ON dbo.cob
      AFTER INSERT, UPDATE
AS
  BEGIN
      SELECT
        cob.fechor
        cob.fechorret
        cob.fechoranu
      FROM
          cob;
      UPDATE v
      SET
        v.fechor = DATEADD (YEAR, 5, fechor),
        v.fechorret = DATEADD (YEAR, 5, fechorret),
        v.fechoranu = DATEADD (YEAR, 5, fechoranu)
      FROM
        INSERTED i
        INNER JOIN cob v ON (i.fechor = v.fechor),
        INNER JOIN cob v ON (i.fechorret = v.fechorret),
        INNER JOIN cob v ON (i.fechoranu = v.fechoranu)
   END
GO

Pero me devuelve error de que la columna fechor es ambigua (la mayoría de columnas son usadas en distintas tablas), tengo poca experiencia en programación sql y ando bastante perdido.

Un saludo y gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Wilfredo Patricio Castillo
Val: 268
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

añadir años con date add a datos entrantes

Publicado por Wilfredo Patricio Castillo (189 intervenciones) el 28/12/2016 22:51:48
Si explicaras mas a detalle cual es tu grave problema que has encontrado y que quieres lograr retrasando y aumentando fechas, talvez Isaías que es un master en el asunto te podría ayudar.

Saludos cordiales,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

añadir años con date add a datos entrantes

Publicado por javier (9 intervenciones) el 28/12/2016 23:07:43
Claro, el problema lo tengo con 5 ordenadores que ejecutan un programa en msdos, enlazados por red a esta base de datos, estos programas tienen un error y es que todo ticket/recibo que tenga fecha posterior a 31/12/2017 los rechaza como no validos. La opción que se me ha ocurrido para no tener que pagar 40.000 euros en nuevos aparatos o 20.000 en adaptarlos para solucionar el problema es retrasar la fecha de todos 5 años (al retrasar 5 años los dias coinciden), pero quiero que con este trigger todos los datos se actualicen a la fecha real y la fecha del servidor lo mismo, para poder expedir recibos y facturas con la fecha real.

Es un parking modesto de un gimnasio pequeño y ese desenvolso nos es inviable.

Espero habee explicado bien.

Un saludo y gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Javier
Val: 111
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

añadir años con date add a datos entrantes

Publicado por Javier (45 intervenciones) el 30/12/2016 00:11:42
Con respecto a que te indique que un campo es ambiguo, es por que debes indicarle la tabla a la que pertenece, precisamente, como lo mencionas, es un campo que se utiliza en varias tablas.

Con respecto a lo que mencionas que no te acepta fechas posteriores a 31/12/2017, es correcta la fecha? no entiendo por que imprimes ticket de 2017, pero bueno, igual, con tu explicación, no me quedo claro si es el software o el equipo el del problema, aunque al día de hoy no conozco una impresora de ticket (me imagino eso utilizas) que no permita imprimir a determinada fecha, menciono eso por que si es el software el del problema, ni invirtiendo todos los euros que tengas en equipo te serviría.

Espero te sirva de algo mi comentario.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

añadir años con date add a datos entrantes

Publicado por javier (9 intervenciones) el 30/12/2016 00:17:56
El problema es que el software que hay en el mercado no es compatible con el equipo que uso ahora mismo.
La fecha es 31/12/2016 perdón, el recibo/factura lo imprime automaticamente el programa usando los datos guardados en la base de datos, son impresoras de papel termico.¿que deberia modicar en el codigo que puse? ya que sigo teniendo el mismo error, me sigue diciendo que fechor es ambiguo.

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Wilfredo Patricio Castillo
Val: 268
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

añadir años con date add a datos entrantes

Publicado por Wilfredo Patricio Castillo (189 intervenciones) el 30/12/2016 01:27:02
A ver prueba así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE TRIGGER [dbo].[TrgUpdateFechaCobranza]
      ON [dbo].[Cob]
      AFTER INSERT, UPDATE
AS
  BEGIN
      UPDATE Cob
      SET
        Fechor = DATEADD (YEAR, 5, Fechor),
        Fechorret = DATEADD (YEAR, 5, Fechorret),
        Fechoranu = DATEADD (YEAR, 5, Fechoranu)
 
        SELECT I.Fechor,I.Fechorret,I.Fechoranu From INSERTED I INNER JOIN Cob C ON I.Fechor = C.Fechor And I.Fechorret=C.Fechorret And I.Fechoranu=C.Fechoranu
   END
GO


Espero que con eso se soluciones tu problema

Saludos cordiales,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

añadir años con date add a datos entrantes

Publicado por javier (9 intervenciones) el 30/12/2016 13:30:22
Casi casi, lo he probado esta mañana y el problema que tengo es que cada vez que se inserta un cobro nuevo suma 5 años a todos las entradas anteriores, ¿existe posibilidad de limitarlo a 2017 o que solo afecte a las nuevas entradas?.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Wilfredo Patricio Castillo
Val: 268
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

añadir años con date add a datos entrantes

Publicado por Wilfredo Patricio Castillo (189 intervenciones) el 30/12/2016 18:08:54
Ahh claro

Lo que pasa es que solo seguí tu ejemplo, pero ya no tienes el error, ahora, solo te faltaría un Where Imagina que habrá algún id que distinga cada registro, operacion o algo, por lo tanto tendrías que agregar después de la última comparacion, un Where C.IdUnico=I.IdUnico, con lo cual se limitaría a solo el registro reciente.

Saludos cordiales,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

añadir años con date add a datos entrantes

Publicado por javier (9 intervenciones) el 30/12/2016 18:15:45
si, tinen un codigo numerico en la columna numque no se repite en ninguno, podrias decirme como ponerlo?

Soy muy muy novato en esto yse me escapa de las manos

Gracias por tu gran ayuda
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Wilfredo Patricio Castillo
Val: 268
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

añadir años con date add a datos entrantes

Publicado por Wilfredo Patricio Castillo (189 intervenciones) el 30/12/2016 18:28:38
Debería quedar así:

1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE TRIGGER [dbo].[TrgUpdateFechaCobranza]
      ON [dbo].[Cob]
      AFTER INSERT, UPDATE
AS
  BEGIN
      UPDATE Cob
      SET
        Fechor = DATEADD (YEAR, 5, Fechor),
        Fechorret = DATEADD (YEAR, 5, Fechorret),
        Fechoranu = DATEADD (YEAR, 5, Fechoranu)
 
        SELECT I.Fechor,I.Fechorret,I.Fechoranu From INSERTED I INNER JOIN Cob C ON I.Fechor = C.Fechor And I.Fechorret=C.Fechorret And I.Fechoranu=C.Fechoranu Where C.IdCob=I.IdCob
   END


Tienes que probar que no afecte a tus datos históricos, espero que esta vez si esté todo correcto, pero tu problema principal ya está resuelto, así que nuevamente espero te salga todo bien.

Saludos cordiales,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

añadir años con date add a datos entrantes

Publicado por javier (9 intervenciones) el 30/12/2016 18:35:48
Vale ya entiendo como se hace, ¿ en vez de el idcobro se puede poner where year < 2017 ? asi seguro no afectaria, ya que al comienzo de cada año guardo los datos del anterior y empiezo con un base de datos limpia
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Wilfredo Patricio Castillo
Val: 268
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

añadir años con date add a datos entrantes

Publicado por Wilfredo Patricio Castillo (189 intervenciones) el 30/12/2016 18:34:31
Perdón, creo que hay un error al momento de insertar los datos le suma 5 años a los históricos verdad?, verifica eso.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

añadir años con date add a datos entrantes

Publicado por javier (9 intervenciones) el 30/12/2016 18:37:21
si, le suma 5 años, por eso pregunto si se podria usar Year como filtro
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Wilfredo
Val: 268
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

añadir años con date add a datos entrantes

Publicado por Wilfredo (189 intervenciones) el 30/12/2016 18:45:29
Ya

1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE TRIGGER [dbo].[TrgUpdateFechaCobranza]
      ON [dbo].[Cob]
      AFTER INSERT
AS
  BEGIN
      UPDATE Cob
      SET
        Fechor = DATEADD (YEAR, 5, Fechor),
        Fechorret = DATEADD (YEAR, 5, Fechorret),
        Fechoranu = DATEADD (YEAR, 5, Fechoranu) Where IdCob=(Select IdCob From inserted)
 
   END
GO

Ahora si creo que está corregido, cuéntanos como te fue y si te sirvió podrías calificar la respuesta.

Saludos cordiales,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil

añadir años con date add a datos entrantes

Publicado por javier (9 intervenciones) el 30/12/2016 19:57:54
voy a probarlo, la parte de select i.... veo que ya no hace falta
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

añadir años con date add a datos entrantes

Publicado por javier (9 intervenciones) el 31/12/2016 01:44:15
Probado y funcionando, ya solo me queda modificar o sumat 5 años a la fecha actual del servidor, si es que eso es posible.

Gracias por tu inestimable ayuda
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

añadir años con date add a datos entrantes

Publicado por Isaias (4558 intervenciones) el 03/01/2017 16:10:33
¿Ustedes no vacacionan en estas fechas?

No veo que menciones que motor de base de datos manejas o no lo vi a primera vista.

¿Porque no tomas la fecha de tu motor al momento de insertar y te quitas de problemas?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Wilfredo Patricio Castillo
Val: 268
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

añadir años con date add a datos entrantes

Publicado por Wilfredo Patricio Castillo (189 intervenciones) el 03/01/2017 19:39:21
Jajajaja, no pues Isaías, esto es mas que vacaciones.

Lo que pasa es que según lo que dice el compañero, es que tiene problemas con una aplicación de las de DOS, y le debe bajar 5 años tanto a las pc y al server, pero debe mantener al mismo tiempo la fecha actual.

Al parecer solucionamos la primera parte, ahora debe estar evaluando la parte de cambiar la fecha al servidor o algo parecido.

Tu estabas de vacaciones y te perdiste tu especialidad, jejejeje.

Feliz año nuevo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

añadir años con date add a datos entrantes

Publicado por Isaias (4558 intervenciones) el 03/01/2017 21:36:34
Gracias, Feliz año

Si me fui de vacaciones y me aleje un poco del foro, pero ya estoy de regreso.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar