假设我有这两个表QuesType和Ques: -
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是主键
在Ques Table中: - QuesID是主键,QuesType ID是从QuesType表
引用QuesTypeID的外键现在我无法从QuesType表中删除记录,我只能通过设置Active = False使QuesType处于非活动状态。 由于与Ques Table的外键关系,我无法永久删除QuesTypes。所以,我只是设置了 列Active = false,然后这些Questypes在绑定时不会显示在我的网格上。
我想要做的是能够永久删除任何QuesType。现在只有在任何地方都没有使用它时才能将其删除 在Ques表中,对吧?
所以要永久删除任何QuesType,我认为这就是我能做的: -
在显示QuesTypes的网格中,我有一个Active的复选框和一个用于删除的按钮。我想是什么,当用户 使一些QuesType处于非活动状态,然后OnCheckChanged()事件将运行,并且将有代码删除所有问题 在Ques表中使用该QuesTypeID。然后在QuesType网格上,该QuesType将显示为Deactivated并且仅显示 然后用户可以永久删除它。
我是否正确思考?
目前在我的DeleteQuesType存储过程中,我正在做的是: -
设置Active = false和 设置QuesTye =某些字符串,如XXInactiveXX
还有其他办法吗?
修改 如果我只想以这种方式实现,比如首先让用户停用QuesType,并且只有在停用了用户可以永久删除它的情况下该怎么办?这是正确的逻辑吗?
答案 0 :(得分:2)
我认为你需要做的是把
ON DELETE CASCADE
外键约束的子句。当删除相应的QuesType行时,这将自动删除Ques表中的行。
答案 1 :(得分:1)
您只能删除已停用的QuesTypes
。
在删除QuesType
之前,您必须查询数据库并查看是否QuesType.Active = false
。如果是,您可以删除子表中引用QuesType.Id
的所有行(这称为级联删除)。您还可以在子行中的QuesTypeID列上设置空值。
阅读this book online以了解ON DELETE CASCADE | SET NULL子句。该条款将使您能够做您想做的事。