y tambien tengo un job que se ejecuta todas las mañanas para
actualizar la edad de todos los empleados (esto para mantener al dia
las edades sin necesidad de que el trigger se dispare)
tengo las siguientes dudas........
el trigger lo declare for update, pero es correcto que dentro del
trigger haga un update de la misma tabla para actualizar la edad?
como podria evitarlo?
cuando se ejecuta el job, este hace un update para actualizar las
edades, pero tambien ocasiona que se dispare el trigger que
basicamente haria la misma tarea que el job.......
como que me suena a trabajo doble.......
como podria hacer para que esto no suceda?
Si te fijas la columna Edad esta calculada como la diferencia entre el dia
de hoy y la FechaNacimiento.
b) Si NO tienes SQL 2000 deberas usar una vista (en 2000 tambien podrias
usar una vista para este proposito):
/* Inicio de Codigo de Vista */
CREATE VIEW EmpleadosconEdad AS
SELECT CodigoEmpleado,
FechaNacimiento,
DATEDIFF(yy,FechaNacimiento,GETDATE()) AS Edad
FROM Empleados
GO
SELECT * from EmpleadosconEdad
/* Fin de Codigo de Vista */
El codigo de la vista es muy parecido a la Tabla de Empleados con la columna
calculada.
Saludos,
Javier Loria
Costa Rica (MVP)
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.
David Ojeda <david...@yahoo.com> escribio:
mira, en un principio utilice datediff como tu me sugieres,
pero datediff no me trae EXACTAMENTE la edad del empleado :(
asi que tuve que utilizar esa solucion (yo estoy de acuerdo que no es
la optima)
me he estado documentando mas sobre sqlserver y me he encontrado que
se hacer funciones definidas por el usuario.....
mi pregunta ahora es:
si yo hiciera una funcion que me devolviera la edad exacta de un
empleado
podria definir ese campo edad calculado pasandole mi funcion para el
calculo?
tal vez suene muy loco, pero 'hechando a perder' se aprende......
saludos.........
Javier Loria
Costa Rica (MVP)
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.
David Ojeda <david...@yahoo.com> escribio:
por ejemplo si la fecha de nacimiento es 01 sep 1975, y la fecha
actual es 13 de agosto del 2003, la persona tendria 27 años en este
momento, hasta el 01 de sep del 2003 tendria 28 años....... por lo
tanto
datediff(yy,fechanac,fechaactual) dara como resultado 28, siendo que
esta persona realmento todavia no cumple 28 años..........
por esta razon utilizo una funcion que compara ademas del año, el mes
y el dia...... y me regresa la edad exacta.......
digamos que la edad de un empleado no es muy significativa a la hora
de realizar algun proceso en la bd, pero por ejemplo la antiguedad
tambien la necesito de manera exacta porque de ella dependen estimulos
al personal por concepto de antiguedad, entonces ya estariamos
hablando de BILLETES ......
gracias por su atencion.......
espero su opinion.......
saludos........
INSERT Empleados
VALUES(1, '19640812')
INSERT Empleados
VALUES(2, '19640813')
INSERT Empleados
VALUES(3, '19640814')
INSERT Empleados
VALUES(4, '19640815')
SELECT * FROM EMPLEADOS
/* Fin de Codigo */
La vista seria equivalente.
Saludos,
Javier Loria
Costa Rica (MVP)
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.
"David Ojeda" <david...@yahoo.com> wrote in message
news:fc8d88c6.03081...@posting.google.com...
me quito el sombrero!!!!!!!!