Quiero escribir un servicio (probablemente en C#) que supervisa una tabla de base de datos. Cuando se inserta un registro en la tabla, quiero que el servicio tome los datos recién insertados y realice alguna lógica comercial compleja con él (demasiado complejo para TSQL).¿Pueden los activadores de SQL CLR hacer esto? ¿O hay un mejor camino?
Una opción es hacer que el servicio revise periódicamente la tabla para ver si se han insertado nuevos registros. El problema de hacerlo de esa manera es que quiero que el servicio sepa sobre los insertos tan pronto como suceden, y no quiero matar el rendimiento de la base de datos.
Haciendo un poco de investigación, parece que escribir un disparador CLR podría hacer el trabajo. Podría escribir desencadenador en C# que se dispara cuando se produce una inserción, y luego enviar los datos recién insertados a un servicio de Windows o WCF.
¿Qué crees que es un buen (o incluso posible) uso de los activadores SQL CLR?
¿Alguna otra idea sobre cómo lograr esto?
Exactamente lo que iba a sugerir. Será transaccionalmente seguro y conservará los registros procesados y no procesados en una tabla que no afectará las tablas de aplicaciones principales. +1 para esta solución! – evilhomer
Utilice el Servidor de servicios de SQL Server –
Buena idea, excepto que pierde todo el rastro de las cosas que cambiaron (es decir, el contenido de la tabla ELIMINADO, disponible solo durante la ejecución del desencadenante). Depende de lo que necesites, supongo. –