pregunta sobre Trigger

28/08/2008 - 13:14 por Tonic | Informe spam
Hola!

Me gustaría poder hacer esta acción con un trigger, a ver si es
posible...

Tengo dos tablas. Una de documentos, que están numerados, y el número
lo guardo en el campo NumDocumento. La otra de contadores, que generan
secuencias numéricas para estos documentos y para otros apartados.

Lo que quiero es que al borrar un documento haga lo siguiente: Mire
cual es el valor actual de la tabla de contadores, y si coincide con
el NumDocumento de la tabla de documentos que se ha eliminado. Si no
coincide no ha de hacer nada, si no ha de hacer un Update en la tabla
de contadores. No sé si me he explicado bien...

Otra forma sería haciendo un sp que se lanzaría al borrar el
documento, pasando por parámetro el NumDocumento... pero me gustaría
hacerlo con un trigger.

Es posible hacerlo?

Saludos y gracias!!
Tonic

Preguntas similare

Leer las respuestas

#1 Rubén Garrigós
28/08/2008 - 13:56 | Informe spam
Hola Tonic,

Cuando dices "el valor actual de la tabla de contadores" ¿te refieres a que
exista o no? ¿Tendrá únicamente un valor?

Podrías poner el DDL de las tablas y explicarlo un poco mejor con un
ejemplo. Al leer lo que necesitas me pareció que un simple update en cascada
teniendo una FK podría solucionar lo que pides de forma eficiente.

Rubén Garrigós
Solid Quality Mentors

"Tonic" wrote:

Hola!

Me gustaría poder hacer esta acción con un trigger, a ver si es
posible...

Tengo dos tablas. Una de documentos, que están numerados, y el número
lo guardo en el campo NumDocumento. La otra de contadores, que generan
secuencias numéricas para estos documentos y para otros apartados.

Lo que quiero es que al borrar un documento haga lo siguiente: Mire
cual es el valor actual de la tabla de contadores, y si coincide con
el NumDocumento de la tabla de documentos que se ha eliminado. Si no
coincide no ha de hacer nada, si no ha de hacer un Update en la tabla
de contadores. No sé si me he explicado bien...

Otra forma sería haciendo un sp que se lanzaría al borrar el
documento, pasando por parámetro el NumDocumento... pero me gustaría
hacerlo con un trigger.

Es posible hacerlo?

Saludos y gracias!!
Tonic

Respuesta Responder a este mensaje
#2 Tonic
28/08/2008 - 14:17 | Informe spam
Hola, Rubén,

Para simplificar, pondré la estructura básica de las dos tablas:

Documentos:
NumDocumento (obtenido del cálculo del valor de Contadores)
Fecha
TipoDocumento

Contadores:
Tabla (A qué tabla afecta. Hay contadores para diferentes tablas. En
el caso que nos ocupa, el valor de este registro es Documentos)
Valor

Bien, al crear un documento va a contadores y obtiene el último valor.
Si se crea el documento correctamente, el campo Valor de Contadores se
incrementa en 1 y se guarda.

Si borramos un documento es donde tengo la duda. No quiero que deje
huecos innecesariamente, y si se ha eliminado el documento con el
NumDocumento más alto, que modifique en Contadores el campo Valor y lo
decremente en 1. Si no es el más alto no ha de hacer nada...

No sé si esta operación se puede hacer con un Trigger. Yo preferiría
una store procedure...

Saludos y gracias!
Tonic
Respuesta Responder a este mensaje
#3 Rubén Garrigós
28/08/2008 - 14:59 | Informe spam
Hola Tonic,

Si, lo que necesitas para mantener esa tabla de contadores podrías
solucionarlo con un trigger. Sea como sea, si prefieres encapsular esta
lógica en un SP de "borrado de documentos" pues hazlo así. ¿Hiciste la
pregunta para justificar que no se pudiera hacer con un trigger? Si fue así,
lo siento, sí se puede :)

Rubén Garrigós
Solid Quality Mentors

"Tonic" wrote:

Hola, Rubén,

Para simplificar, pondré la estructura básica de las dos tablas:

Documentos:
NumDocumento (obtenido del cálculo del valor de Contadores)
Fecha
TipoDocumento

Contadores:
Tabla (A qué tabla afecta. Hay contadores para diferentes tablas. En
el caso que nos ocupa, el valor de este registro es Documentos)
Valor

Bien, al crear un documento va a contadores y obtiene el último valor.
Si se crea el documento correctamente, el campo Valor de Contadores se
incrementa en 1 y se guarda.

Si borramos un documento es donde tengo la duda. No quiero que deje
huecos innecesariamente, y si se ha eliminado el documento con el
NumDocumento más alto, que modifique en Contadores el campo Valor y lo
decremente en 1. Si no es el más alto no ha de hacer nada...

No sé si esta operación se puede hacer con un Trigger. Yo preferiría
una store procedure...

Saludos y gracias!
Tonic

Respuesta Responder a este mensaje
#4 Maxi Accotto
29/08/2008 - 02:16 | Informe spam
Si, es totalmente posible hacer eso! tiene sus pros y sus contras como todo,
pero un trigger es una secuencia de codigo TSQL y esto que usted dice y
mucho mas se puede hacer


Saludos
Maxi Accotto
Microsoft MVP en SQLServer
SQltotalconsulting
-

"Tonic" escribió en el mensaje de
noticias:
Hola!

Me gustaría poder hacer esta acción con un trigger, a ver si es
posible...

Tengo dos tablas. Una de documentos, que están numerados, y el número
lo guardo en el campo NumDocumento. La otra de contadores, que generan
secuencias numéricas para estos documentos y para otros apartados.

Lo que quiero es que al borrar un documento haga lo siguiente: Mire
cual es el valor actual de la tabla de contadores, y si coincide con
el NumDocumento de la tabla de documentos que se ha eliminado. Si no
coincide no ha de hacer nada, si no ha de hacer un Update en la tabla
de contadores. No sé si me he explicado bien...

Otra forma sería haciendo un sp que se lanzaría al borrar el
documento, pasando por parámetro el NumDocumento... pero me gustaría
hacerlo con un trigger.

Es posible hacerlo?

Saludos y gracias!!
Tonic
Respuesta Responder a este mensaje
#5 Tonic
01/09/2008 - 16:08 | Informe spam
Bueno, al final vi que se podía usar la tabla interna deleted para
acceder al registro. Era lo que necesitaba...

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