Để hiểu điều này dễ hiểu hơn, tôi sẽ trình bày cùng một vấn đề giống như một diễn đàn (ứng dụng thực tế không liên quan đến diễn đàn tại tất cả, nhưng tôi nghĩ rằng việc song song này dễ dàng hơn đối với hầu hết chúng ta, ứng dụng thực tế là một thứ rất cụ thể mà hầu hết các lập trình viên sẽ không hiểu (đó là ứng dụng dành cho các nhà thiết kế đồ họa hardcore)).Trình kích hoạt MS SQL Server để cập nhật xếp hạng mục và số phiếu bầu
Giả sử có bảng chuỗi lưu trữ thông tin về từng chuỗi diễn đàn và bảng chuỗi lưu trữ xếp hạng luồng cho mỗi người dùng (1-5). Để có hiệu quả, tôi đã quyết định cache mức trung bình và số phiếu bầu trong bảng chuỗi và trình kích hoạt có vẻ giống như ý tưởng hay để cập nhật nó (tôi đã từng làm những thứ như vậy trong mã ứng dụng thực tế). các mối nguy hiểm gỡ lỗi).
Như bạn đã biết, MS SQL Server không hỗ trợ trình kích hoạt được thực hiện trên mỗi hàng, nó phải là một câu lệnh. Vì vậy, tôi đã cố gắng xác định theo cách này:
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
nhưng tôi gặp lỗi cho mệnh đề "GROUP BY" (mà tôi mong đợi). Câu hỏi là, làm thế nào tôi có thể thực hiện công việc này?
Xin lỗi nếu câu hỏi là ngu ngốc, nhưng đây là lần đầu tiên tôi thực sự cố gắng sử dụng trình kích hoạt.
Thông tin bổ sung: Bảng chủ đề chứa threadid (int, khóa chính), đánh giá (float), cử tri (int) và một số trường khác không liên quan đến câu hỏi hiện tại. Bảng phân luồng chỉ chứa threadid (khóa ngoài), userid (khóa ngoài tới khóa chính của bảng người dùng) và xếp hạng (tinyint giữa 1 và 5).
Thông báo lỗi là "Cú pháp không đúng gần từ khóa 'GROUP'."
khóa chính trên bàn là gì? –
Đăng DML bảng và thông báo lỗi thực tế cũng sẽ giúp ích. –