如何使用c#从winforms UI中删除SQL Server中的false记录
本文关键字:Server SQL 中的 false 记录 删除 何使用 winforms UI | 更新日期: 2023-09-27 18:24:04
我在SQL Server中将已删除的记录设置为false时遇到问题。我尝试了很多。
我的问题是,我在一些列中有一个表,id,name等等…id是主要的关键约束。用户何时删除记录?所以记录应该是摆在桌子上。我会在我的桌子上把那张记录当作假的吗?
将来他想添加已删除id的记录吗?我们给机会添加具有该id的记录?
请告诉我这样做的例子?我试了很多,但我不知道。因为主键不接受重复项,所以我在这里搜索。
我的删除存储过程:
如果用户在我的UI中按下删除按钮:
这个存储过程在我的后端执行:
update table set id=id*-1, flag=1 where id=@id and flag=0;
在前面我已经显示记录被删除。
但如果他想添加带有已删除id的记录。主键发音我的数据库出现错误。当他插入记录时。
感谢
- 将列
DeleteFlag bit
添加到表中,默认情况下设置为false - 总是添加where条件
WHERE DeleteFlag = 0
以在UI中显示数据 - 如果用户从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