更新后插入的SQL Server存储过程

时间:2018-12-20 22:18:17

标签: sql sql-server

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

  • 第一个表包含所有用户的列表
  • 第二个表包含朋友的请求
  • 第三张表保存好友请求的状态码

在设计数据库时,如果user1向user143发送请求,则它们的状态将变为0(待处理)。一旦user143接受,状态将更新为1(已接受),并且user1与用户143成为朋友。

状态更新后,我想编写一个存储过程,以自动将另一行插入到好友请求表中,以使user143成为状态为1的user1的朋友。

我有一个存储过程将状态更新为1,但不确定如何写条件插入(我也有另一个单独的存储过程,可以在IF条件之后使用该插入)。

在下面添加了示例代码

ALTER PROCEDURE person_connections_update
    @PersonId INT,
    @FriendId INT,
    @Status INT
AS
    /*
    DECLARE @_personId INT = 1,
            @_friendId INT = 143,
            @_status INT = 1

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

    -- I'm stuck here
    IF @Status = 1
        INSERT INTO ...
            ...
END

用户表:

+--------+-----------+
| UserId | FirstName |
+--------+-----------+
|      1 | Joe       |
|    143 | Bob       |
+--------+-----------+

状态表:

+----+----------+
| Id |  Status  |
+----+----------+
|  0 | Pending  |
|  1 | Accepted |
|  2 | Declined |
+----+----------+

朋友请求表:

+----------+-----------+----------------------------------------------------+
| PersonId | FriendId  |                       Status                       |
+----------+-----------+----------------------------------------------------+
|        1 |       143 | 0 - updates to 1 after user143 acccepts            |
|      143 |         1 | 1 - want to add this row after status updates to 1 |
+----------+-----------+----------------------------------------------------+

1 个答案:

答案 0 :(得分:0)

其中可以执行SQL指令的SQL服务器中IF块的语法如下:

IF (@Status = 1)
    BEGIN
        INSERT INTO ...
    END
END