sql >> Base de Datos >  >> RDS >> Sqlserver

SQL Trigger Insertar desde varias tablas

No hace referencia a las tablas insertadas o eliminadas que están disponibles solo en el activador, por lo que, por supuesto, está devolviendo más registros de los que necesita en su consulta.

Cuando escribo un disparador por primera vez, lo que hago es crear una tabla temporal llamada #inserted (y/o #deleted) y llenarla con varios registros. Debe coincidir con el diseño de la mesa en la que estará el gatillo. Es importante hacer que su tabla temporal tenga varios registros de entrada que puedan cumplir con los diversos criterios que afectan su consulta (por lo que, en su caso, desea algunos en los que el recuento de casos sea 0 y otros en los que no, por ejemplo) y eso sería típico de datos insertados en la tabla o actualizados init. Los disparadores del servidor SQL operan en conjuntos de datos, por lo que esto también garantiza que su disparador pueda manejar correctamente múltiples inserciones o actualizaciones de registros. Un disparador correctamente escrito tendría casos de prueba que necesita probar para asegurarse de que todo suceda correctamente, su tabla #insertada debe incluir registros que cumplan con todos esos casos de prueba.

Luego escriba la consulta en una transacción (y retírela mientras está probando) uniéndose a #inserted. Si está haciendo una inserción con una selección, solo escriba la parte seleccionada hasta que lo haga bien, luego agregue la inserción. Para probar, escriba una selección de la tabla en la que está insertando para ver los datos que insertó antes de revertir.

Una vez que todo funcione, cambie las referencias #insertadas a insertadas, elimine cualquier código de prueba y, por supuesto, la reversión (posiblemente toda la transacción dependiendo de lo que esté haciendo) y agregue la parte del código para soltar y crear. Ahora puede probar su disparador como disparador, pero está en buena forma porque sabe que es probable que funcione a partir de sus pruebas anteriores.