sql - 发生更新后插入的存储过程
问题描述
我正在尝试设计一个朋友的列表,类似于其他社交媒体网站。我为此创建了 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 时如何创建另一个条目。
解决方案
推荐阅读
- reactjs - 尝试在数组中使用 React 的 useRef 来获取音频的持续时间
- java - 从范围列表中查找重叠范围
- ruby-on-rails - `env:Client` SOAP Fault 带有错误字符串`Internal Error (from client)` 在 Savon 2.0 SOAP 请求上具有正确的参数
- .net-core - 当前线程与 Dispatcher 没有关联。触发渲染时使用 InvokeAsync() 将执行切换到 Dispatcher
- css - 我希望我的搜索框保持不透明度:当它处于活动状态时为 100%
- java - 嗨,我创建了一个 javafx 应用程序,其中应将特定图像裁剪为特定大小
- css - 为什么 CSS 样式即使在被覆盖后仍然存在?
- visual-studio - Git Bash:无法打开包含文件:'io.h':Windows 10 上没有这样的文件或目录
- xml - 如何在 VBA 中使用多行字符串变量写入 XML?
- ansible - Ansible 包含 vars 文件