繁体   English   中英

如何使用c#从winforms UI中删除SQL Server中的记录为false?

[英]How to deleted record as false in SQL Server from winforms UI using c#?

我在 SQL Server 中将删除的记录设置为 false 时遇到问题。我尝试了很多。

我的问题是我在某些列 id、name 等...id 中有一个表作为主键约束。 用户何时删除记录? 这样记录应该出现在桌子上。 我会在我的表中将该记录设为假吗?

将来他想添加带有已删除 id 的记录? 我们有机会添加具有该 ID 的记录吗?

请告诉我这样做的例子? 我尝试了很多,但我不知道。 因为主键不接受重复项,所以我在这里敲了敲。

我的删除存储过程:

如果用户在我的 UI 中按下删除按钮:

这个存储过程在我的后端执行:

update table set id=id*-1, flag=1 where id=@id and flag=0;

在前面我已经显示记录被删除。

但是,如果他想添加具有该已删除 id 的记录。 我的数据库中的主键失效错误。当他插入记录时。

谢谢

  1. 在表中添加一列DeleteFlag bit ,默认设置为false。
  2. 始终添加 where 条件WHERE DeleteFlag = 0以在 UI 中显示数据
  3. 如果用户从 UI 中“删除”记录,则将列更新为 true

不要改变主键,它们不打算改变。

编辑

要重用已删除的Id ,您可以否定Id并将记录标记为已删除。 但是,在正常情况下不建议更新主键。

例子

UPDATE id = -1 * id, flag = 1 WHERE id = @id and flag = 0;

编辑 2

如果使用删除具有相同删除 id 的新记录,则错过,仅否定 id 是不够的。

UPDATE t SET id = newId.Value, flag = 1, new_field=@id     
FROM table t CROSS APPLY
(
    SELECT CASE WHEN MIN(Id) >= 0 THEN -1 ELSE MIN(Id) - 1 END AS value 
    FROM table with(updlock)
) AS newId
WHERE t.id = @id AND flag = 0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM