Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果是链接表,如何永久删除记录?_C#_Asp.net_Sql Server_Sql Delete_Relationships - Fatal编程技术网

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。您可以使用触发器自动执行此操作,但如果您是初学者,我可能会建议您不要这样做。