我在SQL Server中将删除的记录设置为false时遇到问题。我尝试了很多。
我的问题是我在一些列中有一个表id,name等... id为primary 关键约束。当用户删除记录?所以记录应该是 出现在桌子上。我会在表格中将该记录视为假记录吗?
将来他想添加已删除ID的记录吗?我们给予机会 添加具有该ID的记录?
请告诉我这样做的例子?我尝试了很多,但我不知道。因为 主键不接受重复,所以我来到这里。
我的删除存储过程:
如果用户在我的界面中按下删除按钮:
此存储过程在我的后端执行:
update table set id=id*-1, flag=1 where id=@id and flag=0;
在前面我已经显示记录被删除。
但是如果他想添加带有已删除ID的记录。主键发声 来自我的数据库的错误。当他插入记录时。
由于
答案 0 :(得分:0)
DeleteFlag bit
,默认设置为false。WHERE DeleteFlag = 0
以在UI 不要更改主键,它们无意更改。
修改强>
要重复使用已删除的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