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

时间:2015-11-23 06:47:37

标签: c# sql-server

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

我的问题是我在一些列中有一个表id,name等... id为primary   关键约束。当用户删除记录?所以记录应该是   出现在桌子上。我会在表格中将该记录视为假记录吗?

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

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

我的删除存储过程:

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

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

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

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

但是如果他想添加带有已删除ID的记录。主键发声   来自我的数据库的错误。当他插入记录时。

由于

1 个答案:

答案 0 :(得分:0)

  1. 在表格中添加一列DeleteFlag bit,默认设置为false。
  2. 始终添加where条件WHERE DeleteFlag = 0以在UI
  3. 中显示数据
  4. 如果用户"删除"则将列更新为true来自UI的记录
  5. 不要更改主键,它们无意更改。

    修改

    要重复使用已删除的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