Supongamos que hay un sistema, y que ese sistema inserta registros en una
tabla.
Yo no tengo los fuentes de ese sistema pero tengo acceso a la base de datos
y quiero que cada vez que se inserta un registro en alguna tabla específica
se ejecute *un programa*.

Podría hacer lo que dice Pancho y hacer que ese *programa* observe cada n
segundos una tabla en la base de datos y cuando se insertó un registro
ejecute lo que tenía que hacer originalmente.

La verdad, esta solución no me gusta. En C# existe algo así como el "system
watcher " (no recuerdo exactamente) para una carpeta, que interactua con el
sistema operativo tal que determinados procedimientos se ejecutan cuando se
crea o altera algún archivo en esa carpeta.

El mismo Windows también lo hace, si uno abre el explorador de windows dos
veces en la misma carpeta y crea un archivo en alguna de esas dos ventanas
la otra lo muestra casi inmediatamente. No creo que windows use "timers"...
debe tener algún sistema de eventos y notificaciones.

De hecho, MSSQLSERVER también lo tiene!  el Service
Broker<http://msdn.microsoft.com/en-us/library/ms166100.aspx> ,
pero los eventos no salen de la instancia de SQL SERVER, o bien, si salen
pero a otra instancia de SQL SERVER. Lo que yo quiero es que dispare un
evento en algún puerto, como lo hace FIREBIRD, o MYSQL.. ¿ para qué? Para
desligarme de tener que usar C# o bien para desligarme de tener que usar
una instancia de SQLSERVER y programar en lo que se me antoja, sea PYTHON,
JAVA, RUBY O JAVASCRIPT...

Otros ejemplos de uso, y quizá muchísimo mas útil que mi necesidad es para
auditar la performance  del motor y de cualquier aplicación, como por
ejemplo lo que trae SQL SERVER (creo que a partir de 2012) que son los
eventos extendidos que sirven para:



   -

   Encontrar las consultas más caras
   -

   Encontrar las causas principales de la contención de bloqueos temporales
   -

   Encontrar una consulta que esté bloqueando otras consultas
   -

   Solucionar problemas de uso excesivo de la CPU producido por la
   recompilación de consultas
   -

   Solucionar problemas de interbloqueos

Sobre este tema pueden leer mucho
aquí.<http://technet.microsoft.com/es-es/library/bb630282.aspx>
 *Esto no lo conocía cuando hice la pregunta*, lo leí recién ayer (ayer...
no se si fue ayer o el Viernes, ya estoy perdiendo la noción de los días).

En resumen, lo que yo quiero hacer es un sistema que escuche cuando en una
base de datos se produzca un evento sin tener la necesidad de alterar *nada* de
las instrucciones que se utilizan para insertar, borrar y/o modificar.

Para mi, es sumamente importante, ya que de poder hacer esto podría
integrar cualquier sistema hecho con BDD en SQLSERVER solamente pidiendo al
administrador de la base de datos que inserte esos TRIGGERS, (o lo que
fuese). Cuando me refiero a integrar quiero decir por ejemplo, integrar un
sistema con una herramienta de inteligencia de negocios, o con un CRM.
(Ejemplo: cuando se modifica el saldo de la tabla clientes y ese saldo
supera un monto determinado por una regla determinada por el gerente
comercial notificarlo vía email y generar un caso en el CRM).

Espero haber sido claro!

Saludos for everyone and everyone! (todos y todas en inglés...)






[email protected]


El 27 de abril de 2014, 9:03, francisco prieto <[email protected]>escribió:

> Alejandro...
>
> No hace falta que lo escuches... con que el trigger inserte el elemento en
> una tabla y vos mires constantemente dicha tabla sería suficiente.
>
> Saludos,
>
> Pancho
> Córdoba
>
>
> El 26 de abril de 2014, 23:51, César Pistiner <[email protected]>escribió:
>
>> Buenas noches...
>>
>> Cual es la necesidad de capturar ese evento? No te alcanza con
>> controlarlo antes o después de la llamada en tu código?
>>
>> Solo para comprender mas el problema.
>>
>> Saludos,
>> César
>>  El abr 26, 2014 9:51 AM, "Alejandro Paciotti" <
>> [email protected]> escribió:
>>
>>>  Un trigger en la tabla que vos quieras... pero como haces para
>>> "escuchar" o catchear el evento desde afuera, y con que?
>>>
>>> Gracias!
>>>
>>> [email protected]
>>>
>>>
>>> El 26 de abril de 2014, 9:41, francisco prieto 
>>> <[email protected]>escribió:
>>>
>>>> Ale,
>>>>
>>>> Eso es simplemente un Trigger... y en Sql podes crearlo sin
>>>> problemas... gracias a ellos hice mi propia aplicacion de sincronozación
>>>> entre servidores...
>>>>
>>>> Saludos,
>>>>
>>>> Pancho
>>>> Córdoba
>>>>
>>>>
>>>> El 25 de abril de 2014, 12:25, Alejandro Paciotti <
>>>> [email protected]> escribió:
>>>>
>>>>> Hola muchachos:
>>>>>
>>>>> Alguien conoce algún generador de eventos chatcheables en SQL SERVER?
>>>>>
>>>>> ¿Qué quiero decir?
>>>>>
>>>>> En este  ejemplo muestran como *Catch un Firebird events
>>>>> <http://www.king-foo.be/2011/07/catch-firebird-events-with-node-js/>*,
>>>>> que básicamente lo hace a traves de un disparador luego de la inserción /
>>>>> borrado / update de un registro de una tabla.
>>>>>
>>>>>
>>>>> SQL> SET TERM !! ; SQL> CREATE TRIGGER NEW_MONKEY_EVENT FOR monkeys
>>>>> CON> ACTIVE CON> AFTER INSERT CON> AS CON> BEGIN CON> POST_EVENT
>>>>> 'new_monkey_created'; CON> END!! SQL> SET TERM ; !!
>>>>>
>>>>> Todavía no lo probé, porque no quiero enroscarme con FIREBIRD siendo
>>>>> que lo necesito primeramente en SQLSERVER.
>>>>>
>>>>> Si a alguien leyó, vio, o escuchó algo... agradeceré comentarios...
>>>>>
>>>>>
>>>>> Abrazos.
>>>>>
>>>>>
>>>>> [email protected]
>>>>>
>>>>
>>>>
>>>
>

Responder a