在删除查询中使用row_number where where condition

时间:2013-07-24 11:01:07

标签: c# asp.net sql vb.net sql-server-2008-r2

我接下来是DBTable:

enter image description here

在这个数据库中,存在用英语和西班牙语生成的问题。

对于语言= 1是英语,2是同一问题的西班牙语翻译。

我在gridview中只显示特定kiskid的英文问题

要在gridview中显示数据,我使用以下查询:

  

选择ROW_NUMBER()OVER(订购QMID)AS SrNo,问题,kioskid   来自QuestionMaster,其中Language = 1,KioskID ='K1'

此查询为我提供了以下数据:

enter image description here

现在我想从上面的网格中的数据进行删除查询,这样当我删除“我可以进来吗?”即SrNo = 1,那么其相关的西班牙语也应该被删除。

由于我已经通过获取row_number(它不在DB中)生成了srno,因此创建了一个问题,即删除该问题的下一个等效西班牙语记录。

我尝试在删除查询的位置使用row_number,但它没有给我结果。

请帮帮我。

4 个答案:

答案 0 :(得分:2)

为什么这不起作用?

delete from QuestionMaster
    where Language = 2 and KioskID = 'K1' and QMID = 1;

如果是因为您没有QMID,则可以执行以下操作:

delete from QuestionMaster
    where Language = 2 and KioskID = 'K1' and
          QMID in (select QMID
                   from QuestionMaster
                   where Language = 1 and question = 'May I come In'
                  )

我不确定row_number()正在做什么。

编辑:

如果要根据QMID删除两个(所有?)记录,请删除where delete中的语言条件:

delete from QuestionMaster
    where KioskID = 'K1' and
          QMID in (select QMID
                   from QuestionMaster
                   where Language = 1 and question = 'May I come In'
                  )

答案 1 :(得分:0)

您是否只能从数据库中检索QMID并使用该QMID删除所有语言的问题?

答案 2 :(得分:0)

为什么需要使用ROW_NUMBER?不会Select * from QuestionMaster where Language = 1做同样的工作。

delete from QuestionMaster where QMID = 1一样?

答案 3 :(得分:0)

您应该在查询中QMID

select
     ROW_NUMBER() OVER (ORDER BY QMID) AS SrNo
    ,QMID
    ,question
    ,kioskid
from QuestionMaster
where Language=1 and KioskID='K1'

然后在C#/ VB

中创建一个绑定对象
public class Question
{
    [DisplayName("Serial Number")]
    public int SrNo { get; set; }

    [Browsable(false)]
    public int QMID { get; set; }

    public string Question { get; set; }

    public int KioskId { get; set; }
}

BrowsableAttribute表示该列不应显示在DataGridView中。

这样你的删除就更容易了。

delete from QuestionMaster where QMID = @QMID