Ver Mensaje Individual
  #9 (permalink)  
Antiguo 05/09/2005, 15:41
Avatar de Mithrandir
Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años, 1 mes
Puntos: 25
Cita:
Iniciado por kakarot
Mithrandir, esta parte de aqui como lo puedo hacer?¿, es decir puedo hacer @id=NombreTAbla.CampoTabla from deleted?¿, y luego lo del join?¿
Eso lo logras con un "truco" (mas que truco, característica poco conocida), que es el delete/update de un registro producto de un join.

En el caso de querer borrar registros haces algo como:
DELETE t1
FROM tabla t1
INNER JOIN deleted d
ON t1.llave = d.llave

En caso de quieras hacer un update es con algo como:
UPDATE t1
SET t1.campo = D.campo -123
FROM tabla t1
INNER JOIN deleted d
ON t1.llave = d.llave

El único problema de esta técnica es que no puedes permitir el cambio de valores en la llave primaria de la tabla, pues el JOIN no obtendría los resultados correctos.
Cita:
Si el after delete es depues de borrar el INSTEAD OF que signfica?¿
Es un tipo especial de trigger, en este puedes reemplazar la instrucción de insertado en la tabla en si, no simplemente agregar código extra.

Un ejemplo de donde yo lo utilizo es en tablas con campos de fecha de tipo "fecha de creacion", donde no importa que parámetro pasen siempre deberá ser la fecha de sistema, en ese caso usas un trigger INSTEAD OF para tomar el insert del registro en tus manos y reemplazar el valor de "fecha de creacion" por el de la fecha de sistema.

Otro ejemplo es cuando los utilizan para inserts en vistas particionadas/distribuídas, en base a cierto valor en el registro decides si el insert se hace en un servidor o en otro, de esa manera insertas directamente sobre la vista y los datos caen en diferentes sevidores.
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche