我正在尝试实现一个简单的通知系统,该系统将“通知”行插入到每个参与线程的用户的“通知”表中。我的代码发生在触发器中,目前用于通知用户另一个用户已经回复了他的特定评论,但没有通知线程中的其他人已经发布了新评论。
ALTER TRIGGER OnDocumentCommentPosted
ON DocumentComments
AFTER
INSERT
AS
IF (SELECT InResponseTo FROM inserted) IS NOT NULL
BEGIN
INSERT INTO Notifications
([CommentID],[Type],[RecieverId]) //This is a notification object from table Notifications shown at the bottom of this post
SELECT id, 'DocumentComment', InResponseTo //this is a DocumentComment object from table DocumentComments shown at the bottom of this post
FROM inserted
END
我基本上想从下面的查询中获取结果,然后为每个结果运行上面的相同查询。
SELECT OwnerId FROM DocumentComments WHERE DocumentID = @DocumentId
给我一个ID列表
然后对于列表中的每个 id 运行以下查询,将每个 id 替换为 @id
SET @Comid = (SELECT id FROM inserted);
INSERT INTO Notifications
([CommentID],[Type],[RecieverId])
@Comid, 'DocumentComment', @id
有没有办法将这种类型的功能加入到我上面的原始触发器查询中?
编辑
似乎这可能有点难以理解,所以让我试着简单地解释一下我的表结构
简要说明
表:文档 - (保存 excel、pdf 的实际数据,以及通过用户上传的任何内容)
表:DocumentComments -(保存对每个文档的评论 [One - Many])
表:通知 - (保存每条评论的通知数据,并提供布尔值是否已被阅读
底层结构
表文档
PK = id
表 DocumentComments
PK = id
FK = DocumentId
InResponseTo = 已通过插入评论回复评论的用户的 UserId OwnerId = 拥有或创建此评论的用户的 UserId
表通知(与 DocumentComments 没有直接关系,因为该表是一个通用表,其中包含许多类型的通知,而不仅仅是 DocumentComment 通知
PK = id
FK = RecieverId = 将接收此通知的用户的 UserId。
CommentID = 如果通知处理评论,则此值将填充有问题的评论
AnnouncementID = 如果通知涉及公告,则此值将填充有问题的公告
EventID
MeetingID = 这两个字段的工作方式与上述两个字段相同。
Read = boolean,通知的读取状态