SQL存储过程,用于删除特定测试的所有问题和答案

时间:2017-06-23 12:16:01

标签: asp.net sql-server stored-procedures

在我的SQL Server 2008数据库中,我有三个表:

  • 测试(TestId int,TestName varchar(50),UserId int,UserType int,isDelete bit)

  • 问题(Tid int,Qid int,Qtype int,Question varchar(100),isDelete bit)

  • 答案(questionid int,qtype int,description varchar(200),isDelete bit)

TestId在问题表中可用,而不在答案表中。 每当我删除记录时,isDelete字段都会更新为true。

现在我想删除一个测试,即该测试中的所有问题,并且必须删除这些问题的所有答案,但我无法让SP删除测试 我是编程新手。

2 个答案:

答案 0 :(得分:1)

您正在做"软删除"所以忽略关于触发器和级联以及操作顺序的所有混淆。使用联接找出哪些属于您要删除的测试。

答案 1 :(得分:0)

试试这个:

Delete Answers from Answers
inner join Questions on
Questions.Qid = Answers.questionid
inner join Test on
Test.TestId = Questions.Tid
where Test.TestId = @Id
and Test.isDelete = 1

Delete Questions from Questions 
inner join Test on
Test.TestId = Questions.Tid
where Test.TestId = @Id
and Test.isDelete = 1

Delete Test where TestId = @Id
and isDelete = 1

通过联接,您可以使用TestquestionsTestId连接,然后使用QuestionsAnswerQid连接,它将全部删除这些表中与de条件匹配的记录。