首页 > 解决方案 > 发生更新后插入的存储过程

问题描述

我正在尝试设计一个朋友的列表,类似于其他社交媒体网站。我为此创建了 3 个表。

设计数据库,如果 person1 向 person2 发送请求,他们的状态变为 0(待处理)。一旦 person2 接受,状态将更新为 1(已接受),并且 person1 与 person2 成为朋友。IE。数据库将有 person1 -> person2 和 person2 -> person1 的另一个条目

在状态更新后,我想写一个存储过程,自动在好友请求表中插入另一行,让 person2 与 person1 成为好友,状态为 1。

期望的结果:在 personId2 接受请求后,我希望状态更新为 1 并创建另一行,因为 personId2 是朋友 personId1

代码:

ALTER PROCEDURE [dbo].[person_connections_update]
    @PersonId INT,
    @FriendId INT,
    @Status INT
AS
    /*
    DECLARE
        @_personId INT = 1,
        @_friendId INT = 2,
        @_status INT = 0

    EXEC person_connections_update
        @_personId,
        @_friendId,
        @_status
    */
BEGIN 
    BEGIN TRY
    BEGIN TRANSACTION
        UPDATE person_connections
        SET PersonId = @PersonId,
            FriendId = @FriendId,
            Status = @Status
        WHERE
            PersonId = @PersonId AND FriendId = @FriendId

        COMMIT TRANSACTION

        IF (@Status = 1)
        BEGIN
            INSERT INTO person_connections
            SET --what is the correct syntax here to insert the entry of user 2 being friends with user 1? i basically need to swap the values when the new entry is generated.
                PersonId = @FriendId,
                FriendId = @PersonId,
                Status = 1
        END
    END TRY
    BEGIN CATCH
        IF @@TRANCOUNT > 0
        BEGIN
            ROLLBACK TRANSACTION
        END
    END CATCH
END

到目前为止,这就是我所拥有的更新。这只是将状态更新为 1,但我无法弄清楚当状态更改为 1 时如何创建另一个条目。

标签: sqlsql-server

解决方案


推荐阅读