Para que esto sea más fácil de entender, presentaré el mismo problema exactamente como si se tratara de un foro (la aplicación real no tiene que ver con foros en Todo, pero creo que ese paralelo es más fácil de entender para la mayoría de nosotros, la aplicación real es algo muy específico que la mayoría de los programadores no entenderán (es una aplicación destinada a diseñadores gráficos hardcore).Disparador de MS SQL Server para actualizar la calificación del artículo y el número de votos
Supongamos que hay una tabla de subprocesos que almacena información sobre cada subproceso de foro y una tabla de subprocesamiento que almacena clasificaciones de subprocesos por usuario (1-5). Por eficiencia, decidí almacenar en caché el promedio de calificación y el número de votos en la tabla de hilos y los disparadores sonaron como una buena idea para actualizarlo (solía hacer esas cosas en el código de la aplicación real, pero creo que los desencadenantes valen la pena intentarlo, a pesar los peligros de depuración).
Como ya sabe, MS SQL Server no admite que se ejecute un disparador por fila, tiene que ser por instrucción. Así que he intentado definir de esta manera:
CREATE TRIGGER thread_rating ON threadrating
AFTER INSERT
AS
UPDATE thread
SET
thread.rating = (thread.rating * thread.voters + SUM(inserted.rating))/(thread.voters + COUNT(inserted.rating)),
thread.voters = thread.voters + COUNT(inserted.rating)
FROM thread
INNER JOIN inserted ON(inserted.threadid = thread.threadid)
GROUP BY inserted.threadid
pero me da un error para el "GROUP BY" cláusula (que yo esperaba). La pregunta es, ¿cómo puedo hacer que esto funcione?
Disculpa si la pregunta es estúpida, pero es la primera vez que intento usar activadores.
Información adicional: La tabla de hilos contendría threadid (int, clave principal), rating (float), votantes (int) y algunos otros campos que son irrelevantes a la pregunta actual. La tabla de subprocesos solo contiene threadid (clave externa), ID de usuario (clave externa a la clave principal de la tabla de usuarios) y calificación (tinyint entre 1 y 5).
El mensaje de error es "Sintaxis incorrecta cerca de la palabra clave 'GRUPO'."
Cuál es la clave principal en la tabla? –
Publicar la tabla DML y el mensaje de error real también ayudaría. –