sql server - valor - Ejecute el procedimiento almacenado en la notificación de consulta sin SqlDependency
procedimiento almacenado sql server select (1)
En lugar de usar SqlDependency puede usar la clase SqlNotificationRequest .
Del artículo de MSDN Habilitación de notificaciones de consulta :
... SqlNotificationRequest requiere que usted implemente toda la infraestructura de escucha usted mismo. Además, se deben definir todos los objetos admitidos de Service Broker, como la cola, el servicio y los tipos de mensajes admitidos por la cola. Este enfoque manual es útil si su aplicación requiere mensajes de notificación especiales o comportamientos de notificación, o si su aplicación es parte de una aplicación de Service Broker más grande.
Pero esto aún no le permite suscribirse a una notificación de cambio de datos con código T-SQL nativo. Supongo que podría ser posible crear una función CLR para enviar una suscripción de notificación.
Además, MS SQL Server tiene funciones de "Seguimiento de Cambios" que pueden ser útiles para usted. Habilita la base de datos para el seguimiento de cambios y configura qué tablas desea rastrear. A continuación, SQL Server crea registros de cambios en cada actualización, inserta, elimina en una tabla y luego te permite buscar cambios en los registros que se han realizado desde la última vez que marcaste. Esto es muy útil para sincronizar cambios y es más eficiente que usar disparadores. También es más fácil de administrar que hacer sus propias tablas de seguimiento. Esta ha sido una característica desde SQL Server 2005.
Cómo: Usar el seguimiento de cambios de SQL Server
El seguimiento de cambios solo captura las claves principales de las tablas y permite consultar qué campos se pudieron haber modificado. Luego puede consultar las tablas para unirse a esas claves para obtener los datos actuales. Si desea que capture los datos también puede usar Change Capture, pero requiere más sobrecarga y al menos SQL Server 2008 Enterprise Edition.
Al usar estas características, aún tendría que crear algún servicio o trabajo del Agente SQL que revise periódicamente las tablas de cambios y envíe los mensajes de Service Broker correspondientes a sus servicios.
Saludando a todos!
En SqlDependency puede suscribirse fácilmente al cambio de datos utilizando el mecanismo de Notificación de consultas. (o estableciendo atributos odbc )
SqlDependency dependency = new SqlDependency(
new SqlCommand("SELECT [ID], [Name] FROM [dbo].[tbl_Contact]", this.CurrentConnection)
);
dependency.OnChange += this.dependency_OnChange;
Por otro lado, al usar sql nativo puede ejecutar el procedimiento almacenado en algún evento de DMV. (como el cierre de sesión del usuario)
create queue [myEventQueue] with activation (
status = on,
procedure_name = dbo.QueueProcessing,
max_queue_readers = 2,
execute as self
)
create service [myNotifications] on queue [myEventQueue]
([http://schemas.microsoft.com/SQL/Notifications/PostEventNotification]);
CREATE EVENT NOTIFICATION [myEvent]
ON server
FOR AUDIT_LOGOUT
TO SERVICE ''myNotifications'', ''current database''
Mi pregunta es:
- ¿Podemos crear y suscribir alguna consulta de evento al cambio de datos sin SqlDependency (usando t-sql nativo en Managment Studio)?
- ¿Podemos ejecutar el procedimiento almacenado cuando "algunos datos modificados"?
¡Gracias por cualquier ayuda!
PD: ¿Por qué no puedo usar disparadores?
Tengo alrededor de 200 "eventos" que dependen de múltiples tablas con diferentes predicados (filtros). Desafortunadamente, los usuarios pueden cambiarlo.