gpt4 book ai didi

c# - 根据结果​​集更新或插入数据库中的记录

转载 作者:太空宇宙 更新时间:2023-11-03 15:33:42 26 4
gpt4 key购买 nike

我有一张这样的 table

enter image description here

我有另一个表 sections,其中有 6 个部分,id 从 1 到 6。我从用户那里得到了一个部分 ID 列表,其中提供了有关用户当前事件部分的信息。假设返回给我的列表具有如下部分 ID,对于 ID 为 1 的用户,{2,3,4,5}。现在我的问题是

  1. 如何将这个部分 ID 列表传递给我的存储过程
  2. 我想更新记录的事件标志,其中部分 ID 为 1,用户 ID 为 1,因为部分 ID 列表没有条目 1
  3. 我想在同一个表中为用户 id 1 插入一条 section id 5 的新记录,因为它在 section ids 列表中返回。

谁能告诉我如何实现这一点?

我可以从以下查询中获取总节 id

select Id from sections

但不知道我会在 total list of section id's 之间迭代并比较从 C# 返回的 list of section ids

最佳答案

回答完整的问题。

<强>1。就像我在评论中说的:Table valued parameters

首先创建一个UDTT存储用于存储过程输入的部分 ID。

CREATE TYPE [dbo].[SectionIdUDTT] AS TABLE(
[id] int NOT NULL
)

将此 UDTT 用作存储过程的参数:

ALTER PROCEDURE [dbo].[YourSPname] @SectionId SectionIdUDTT readonly,
@UserId INT
AS
BEGIN

为了调用此存储过程,您必须先填写 SectionIdUDTT,然后再调用存储过程。

DECLARE @SectionId AS SectionIdUDTT;

INSERT INTO @SectionId
--your values here

EXEC YourSPname @SectionId, @UserId;

看看DataTable类以便从 C# 中调用它。确保用户对 UDTT 具有执行权限。

存储过程中的2

将已存在但不在表值参数中的用户的记录设置为非事件。

UPDATE YourTable
SET IsActive = 0
WHERE UserId = @UserId
AND SectionId NOT IN (SELECT id FROM @SectionId)
AND SectionId IN (SELECT Id FROM sections) --Not really needed

存储过程中的3

插入还不存在的记录即可。我只是假设 id 是一个标识列。

INSERT INTO YourTable (UserId, SectionId, IsActive)
SELECT @UserId,
s.id,
1
FROM @SectionId s
WHERE NOT EXISTS (
SELECT 1
FROM YourTable y
WHERE y.SectionId = s.id
AND y.UserId = @UserId
)

我会推荐 Transaction management在您的存储过程中。

关于c# - 根据结果​​集更新或插入数据库中的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32694746/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com