Triggers Instead of

21/02/2005 - 09:44 por José Antonio | Informe spam
Dado mi poca experiencia en sql server, hay veces que despues de leer los
bool llego a scar conclusiones equivocadas, que gracias a dios en este foro
son felizmente corregidas.

Necesito controlar que a la hora de insertar las filas en una tabla, si la
columna cantidad es cero, esa fila no se inserte.

He pensado en los triggers instead of, pero no lo tengo claro.

Cuando se define para una tabla un trigger instead of para inserción sql
server no inserta nada y deja que el programador inserte en la tabla lo que
estime oportuno, dentro del trigger se podría hacer:

insert tabla select * from inserted where inserted.cantidad>0

si no se realiza ningun insert por el programador, no se inserta nada en
ninguna tabla.

¿Es correcta esta conclusión?

Si además del triger instead of, hubiese otro triger normal en el insert de
la tabla, ¿tambien se dispara despues del instead of?.

Gracias por su aportación.

Preguntas similare

Leer las respuestas

#1 qwalgrande
21/02/2005 - 12:18 | Informe spam
Hola.

Te desaconsejo la utilización de triggers para la problemática que
describes. Puedes hacerlo de una forma mucho más limpia con una restricción,
que en general, es lo recomendable cuando quieres realizar comprobaciones
cuyo ámbito de chequeo y consecuencias se restrinjan a la sea la propia
tabla.

Léete "CHECK Constraints" en los BOL.

qwalgrande


"José Antonio" wrote in message
news:utk3gG$
Dado mi poca experiencia en sql server, hay veces que despues de leer los
bool llego a scar conclusiones equivocadas, que gracias a dios en este foro
son felizmente corregidas.

Necesito controlar que a la hora de insertar las filas en una tabla, si la
columna cantidad es cero, esa fila no se inserte.

He pensado en los triggers instead of, pero no lo tengo claro.

Cuando se define para una tabla un trigger instead of para inserción sql
server no inserta nada y deja que el programador inserte en la tabla lo que
estime oportuno, dentro del trigger se podría hacer:

insert tabla select * from inserted where inserted.cantidad>0

si no se realiza ningun insert por el programador, no se inserta nada en
ninguna tabla.

¿Es correcta esta conclusión?

Si además del triger instead of, hubiese otro triger normal en el insert de
la tabla, ¿tambien se dispara despues del instead of?.

Gracias por su aportación.
Respuesta Responder a este mensaje
#2 José Antonio
21/02/2005 - 12:47 | Informe spam
Ya, pero si utilizo una restriccion me dara error al intentar insertar una
fila con la cantidad a cero, y yo lo que quiero es que solo inserte las que
son mayores que cero y las que son cero las descarte y no las inserte, pero
sin comunicarme ningun mensaje de error e insertandome las filas que son
mayores que cero.

Se puede hacer esto con restricciones de columna?

"qwalgrande" escribió en el mensaje
news:
Hola.

Te desaconsejo la utilización de triggers para la problemática que
describes. Puedes hacerlo de una forma mucho más limpia con una
restricción,
que en general, es lo recomendable cuando quieres realizar comprobaciones
cuyo ámbito de chequeo y consecuencias se restrinjan a la sea la propia
tabla.

Léete "CHECK Constraints" en los BOL.

qwalgrande


"José Antonio" wrote in message
news:utk3gG$
Dado mi poca experiencia en sql server, hay veces que despues de leer los
bool llego a scar conclusiones equivocadas, que gracias a dios en este
foro
son felizmente corregidas.

Necesito controlar que a la hora de insertar las filas en una tabla, si la
columna cantidad es cero, esa fila no se inserte.

He pensado en los triggers instead of, pero no lo tengo claro.

Cuando se define para una tabla un trigger instead of para inserción sql
server no inserta nada y deja que el programador inserte en la tabla lo
que
estime oportuno, dentro del trigger se podría hacer:

insert tabla select * from inserted where inserted.cantidad>0

si no se realiza ningun insert por el programador, no se inserta nada en
ninguna tabla.

¿Es correcta esta conclusión?

Si además del triger instead of, hubiese otro triger normal en el insert
de
la tabla, ¿tambien se dispara despues del instead of?.

Gracias por su aportación.



Respuesta Responder a este mensaje
#3 qwalgrande
21/02/2005 - 13:26 | Informe spam
Hola.

No sé si nos estamos entendiendo. Por un lado, tú no quieres que se inserten
filas con cantidad = 0. Perfecto, restricción check. Por otro, por lo que
entreveo, vas a mandar conjuntos de inserciones (insert..select..), de tal
forma que no puedes filtrar por ese campo y no quieres que se te impida
insertar las demás, simplemente que esos ceros se ignoren. La restricción
check no te valdría porque fallaría la transacción completa y no te
insertaría ningún registro. No es lo más recomendable (lo ideal sería que
sólo enviaras a insertar aquello que quieres insertar y que si hay algún
error se te notifique a la aplicación y que la aplicación decida qué quiere
hacer con ese error), pero puedes usar un trigger instead of. De hecho,
estos triggers tienen esta finalidad, reemplazar la acción que se envía por
otra a conveniencia.

El resto de triggers se ejecutarían con normalidad

qwalgrande


"José Antonio" wrote in message
news:%
Ya, pero si utilizo una restriccion me dara error al intentar insertar una
fila con la cantidad a cero, y yo lo que quiero es que solo inserte las que
son mayores que cero y las que son cero las descarte y no las inserte, pero
sin comunicarme ningun mensaje de error e insertandome las filas que son
mayores que cero.

Se puede hacer esto con restricciones de columna?

"qwalgrande" escribió en el mensaje
news:
Hola.

Te desaconsejo la utilización de triggers para la problemática que
describes. Puedes hacerlo de una forma mucho más limpia con una
restricción,
que en general, es lo recomendable cuando quieres realizar comprobaciones
cuyo ámbito de chequeo y consecuencias se restrinjan a la sea la propia
tabla.

Léete "CHECK Constraints" en los BOL.

qwalgrande


"José Antonio" wrote in message
news:utk3gG$
Dado mi poca experiencia en sql server, hay veces que despues de leer los
bool llego a scar conclusiones equivocadas, que gracias a dios en este
foro
son felizmente corregidas.

Necesito controlar que a la hora de insertar las filas en una tabla, si la
columna cantidad es cero, esa fila no se inserte.

He pensado en los triggers instead of, pero no lo tengo claro.

Cuando se define para una tabla un trigger instead of para inserción sql
server no inserta nada y deja que el programador inserte en la tabla lo
que
estime oportuno, dentro del trigger se podría hacer:

insert tabla select * from inserted where inserted.cantidad>0

si no se realiza ningun insert por el programador, no se inserta nada en
ninguna tabla.

¿Es correcta esta conclusión?

Si además del triger instead of, hubiese otro triger normal en el insert
de
la tabla, ¿tambien se dispara despues del instead of?.

Gracias por su aportación.



Respuesta Responder a este mensaje
#4 José Antonio
21/02/2005 - 13:49 | Informe spam
Gracias por la informacion.

"qwalgrande" escribió en el mensaje
news:
Hola.

No sé si nos estamos entendiendo. Por un lado, tú no quieres que se
inserten
filas con cantidad = 0. Perfecto, restricción check. Por otro, por lo que
entreveo, vas a mandar conjuntos de inserciones (insert..select..), de tal
forma que no puedes filtrar por ese campo y no quieres que se te impida
insertar las demás, simplemente que esos ceros se ignoren. La restricción
check no te valdría porque fallaría la transacción completa y no te
insertaría ningún registro. No es lo más recomendable (lo ideal sería que
sólo enviaras a insertar aquello que quieres insertar y que si hay algún
error se te notifique a la aplicación y que la aplicación decida qué
quiere
hacer con ese error), pero puedes usar un trigger instead of. De hecho,
estos triggers tienen esta finalidad, reemplazar la acción que se envía
por
otra a conveniencia.

El resto de triggers se ejecutarían con normalidad

qwalgrande


"José Antonio" wrote in message
news:%
Ya, pero si utilizo una restriccion me dara error al intentar insertar una
fila con la cantidad a cero, y yo lo que quiero es que solo inserte las
que
son mayores que cero y las que son cero las descarte y no las inserte,
pero
sin comunicarme ningun mensaje de error e insertandome las filas que son
mayores que cero.

Se puede hacer esto con restricciones de columna?

"qwalgrande" escribió en el mensaje
news:
Hola.

Te desaconsejo la utilización de triggers para la problemática que
describes. Puedes hacerlo de una forma mucho más limpia con una
restricción,
que en general, es lo recomendable cuando quieres realizar comprobaciones
cuyo ámbito de chequeo y consecuencias se restrinjan a la sea la propia
tabla.

Léete "CHECK Constraints" en los BOL.

qwalgrande


"José Antonio" wrote in message
news:utk3gG$
Dado mi poca experiencia en sql server, hay veces que despues de leer los
bool llego a scar conclusiones equivocadas, que gracias a dios en este
foro
son felizmente corregidas.

Necesito controlar que a la hora de insertar las filas en una tabla, si
la
columna cantidad es cero, esa fila no se inserte.

He pensado en los triggers instead of, pero no lo tengo claro.

Cuando se define para una tabla un trigger instead of para inserción sql
server no inserta nada y deja que el programador inserte en la tabla lo
que
estime oportuno, dentro del trigger se podría hacer:

insert tabla select * from inserted where inserted.cantidad>0

si no se realiza ningun insert por el programador, no se inserta nada en
ninguna tabla.

¿Es correcta esta conclusión?

Si además del triger instead of, hubiese otro triger normal en el insert
de
la tabla, ¿tambien se dispara despues del instead of?.

Gracias por su aportación.








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