Maestro - Detalles

06/10/2005 - 22:30 por jpablos | Informe spam
Saludos .

Recientemente se me ha presentado un problema en las tablas donde trabajo,
tengo una tabla de facturas y una de detalle de facturas, en la tabla de
facturas tengo los totales de la transaccion y en la de detalle de facturas
tengo el desglose de ese total, pero debido a un problema que todavia no se
el motivo mi aplicacion grabo mal los valores de tal modo que el campo total
de mi cabecera de facturas tenia un total de 45.50 y el la suma de los
detalles sumaba 40.37, al parecer en el proceso de grabacion paso algo y no
se guardo un registro de los detalles, pero mi pregunta es hay alguna manera
en sql de decirle que si mis tablas estan relacionadas y no coinciden los
detalles me mande un mensaje de error y no se guarde nada en las tablas, me
han dicho que en oracle (realmente no conozco oracle) se puede relacionar 2
campos de 2 tablas uno como maestro y otro como detalle, y si no coinciden
los valores en esos campos genera un mensaje de error, se puede hacer algo
parecido en sql server ???? o como podria solucionar este problema que me
ocurre para que no vuelva a pasar ????

Gracias ...

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
06/10/2005 - 22:52 | Informe spam
Puedes crear un trigger que chequee que la suma de los detalles sea igual al
total del maestro.

Ejemplo:

create trigger tr_factura_detalle_ins on dbo.factura_detalle
for insert
as
set nocount on

if exists (
select 1
from dbo.factura as f inner join inserted as i
on f.facturaid = i.facturaid
group by f.facturaid
having max(f.factura_total) != sum(i.precio_unitario * i.cantidad)
)
begin
rollback transaction
raiserror('El total de la factura no coincide con la suma de ...', 16, 1)
end

go


AMB

"jpablos" wrote:

Saludos .

Recientemente se me ha presentado un problema en las tablas donde trabajo,
tengo una tabla de facturas y una de detalle de facturas, en la tabla de
facturas tengo los totales de la transaccion y en la de detalle de facturas
tengo el desglose de ese total, pero debido a un problema que todavia no se
el motivo mi aplicacion grabo mal los valores de tal modo que el campo total
de mi cabecera de facturas tenia un total de 45.50 y el la suma de los
detalles sumaba 40.37, al parecer en el proceso de grabacion paso algo y no
se guardo un registro de los detalles, pero mi pregunta es hay alguna manera
en sql de decirle que si mis tablas estan relacionadas y no coinciden los
detalles me mande un mensaje de error y no se guarde nada en las tablas, me
han dicho que en oracle (realmente no conozco oracle) se puede relacionar 2
campos de 2 tablas uno como maestro y otro como detalle, y si no coinciden
los valores en esos campos genera un mensaje de error, se puede hacer algo
parecido en sql server ???? o como podria solucionar este problema que me
ocurre para que no vuelva a pasar ????

Gracias ...
Respuesta Responder a este mensaje
#2 Javier Rojas Goñi/ Parse Software
06/10/2005 - 22:52 | Informe spam
Hola,

Un metodo sería escribir TRIGGERS en la tabla detalle, estos triggers sob
script T-SQL que se activan si:
- creas, modificas o borras un registro

Estos triggers se deberian encargar de mantener la tabla madre actualizada,
con lo que nunca tendrías discrepancias.

Adicionalmente, si estás guardando madre y detalle juntos, asegúrate de que
lo haces en el contexto de una transacción, de modo que se guarde todo o
nada (si hubo error), asegurando que la BD queda en estado consistente.
Javier Rojas Goñi
PARSE Software Chile
-

56-32-666366


-

"jpablos" escribió en el mensaje
news:
Saludos .

Recientemente se me ha presentado un problema en las tablas donde trabajo,
tengo una tabla de facturas y una de detalle de facturas, en la tabla de
facturas tengo los totales de la transaccion y en la de detalle de
facturas
tengo el desglose de ese total, pero debido a un problema que todavia no
se
el motivo mi aplicacion grabo mal los valores de tal modo que el campo
total
de mi cabecera de facturas tenia un total de 45.50 y el la suma de los
detalles sumaba 40.37, al parecer en el proceso de grabacion paso algo y
no
se guardo un registro de los detalles, pero mi pregunta es hay alguna
manera
en sql de decirle que si mis tablas estan relacionadas y no coinciden los
detalles me mande un mensaje de error y no se guarde nada en las tablas,
me
han dicho que en oracle (realmente no conozco oracle) se puede relacionar
2
campos de 2 tablas uno como maestro y otro como detalle, y si no coinciden
los valores en esos campos genera un mensaje de error, se puede hacer algo
parecido en sql server ???? o como podria solucionar este problema que me
ocurre para que no vuelva a pasar ????

Gracias ...
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida