C# 如果是链接表,如何永久删除记录?
假设我有两张桌子,分别是问号和问号:-C# 如果是链接表,如何永久删除记录?,c#,asp.net,sql-server,sql-delete,relationships,C#,Asp.net,Sql Server,Sql Delete,Relationships,假设我有两张桌子,分别是问号和问号:- QuesType QuestypeID|QuesType |Active ------------------------------------ 101 |QuesType1 |True 102 |QuesType2 |True 103 |XXInActiveXX |False Ques QuesID|Ques|Answer|QUesTypeID|Active ----------
QuesType
QuestypeID|QuesType |Active
------------------------------------
101 |QuesType1 |True
102 |QuesType2 |True
103 |XXInActiveXX |False
Ques
QuesID|Ques|Answer|QUesTypeID|Active
------------------------------------
1 |Ques1|Ans1 |101 |True
2 |Ques2|Ans2 |102 |True
3 |Ques3|Ans3 |101 |True
在QuesType表中:-
QuesTypeID是主键
在表中:-
QuesID是主键,QuesType ID是引用QuesType表中QuesTypeID的外键
现在我无法从QuesType表中删除记录,我只能通过设置Active=False使QuesType处于非活动状态。
我无法永久删除Questype,因为它与Ques表具有外键关系。所以,我只是设定了
column Active=false,这些查询在绑定时不会显示在我的网格上
我想做的是能够永久删除任何问题。现在,它只能被删除,如果它没有被使用的任何地方
在桌子上,对吗
因此,要永久删除任何问题,我想我可以这样做:-
在显示QuesTypes的网格中,我有一个活动复选框和一个删除按钮
使某些查询处于非活动状态,然后将运行OnCheckChanged()事件,该事件将包含删除所有问题的代码
在使用该QuesTypeID的Ques表中。然后在QuesType网格上,该QuesType将显示为已停用且仅为
然后用户可以永久删除它
我的想法正确吗
目前,在我的DeleteQuesType存储过程中,我正在做的是:-
将活动参数设置为false,然后
设置QuesTye=XXInactiveXX之类的字符串
还有别的办法吗
编辑
如果我只想通过这种方式实现,比如首先让用户停用QuesType,并且只有当它被停用时,用户才能永久删除它。这是正确的逻辑吗?我想你需要做的是把
ON DELETE CASCADE
关于外键约束的子句。当相应的QuesType行被删除时,这将自动从QuesType表中删除行。您只能删除已停用的
QuesType
在删除QuesType
之前,您必须查询数据库并查看QuesType.Active=false
。如果是,您可以从子表中删除引用QuesType.Id
(这称为级联删除)的所有行。还可以在子行中的QuesTypeID列上设置空值
阅读以了解ON DELETE CASCADE | SET NULL子句。这个子句可以让你做你想做的事情。um好吧,但是如果我只想用那种方式实现,比如首先让用户停用查询类型,并且只有当它被停用时,用户才能永久删除它。这是正确的逻辑吗?您已经有一个活动列,只需在删除之前查询此列以确保其为false。您可以使用触发器自动执行此操作,但如果您是初学者,我可能会建议您不要这样做。