一个SET语句中嵌套的WHERE子句

时间:2014-08-12 16:36:31

标签: sql sql-server

我试图从通过SQL拉出的表中按特定顺序显示信息。我是通过一个名为OrderID的列来完成的,它将一个整数作为其属性。表具有按OrderID的升序填充的行。用户可以选择删除表中的行。此外,多个用户可以具有相同的OrderID,但每行都有唯一的标识符(ID)。因此,在尝试删除时,我会根据唯一ID识别要删除的行。

string query = "DELETE FROM dbo.ExampleDB WHERE ID = @ID";

在我从表中删除此行之前,如果它们大于将要删除的OrderID,我想将所有OrderID降低一个。我试图通过使用此查询来执行此操作:

string query2 = "UPDATE dbo.ExampleDB SET OrderID = (OrderID - 1) WHERE OrderID > (OrderID WHERE ID = @ID)";

如您所见,我从整数值OrderID中减去1。对我来说,必须保持所有OrderID的增量为1,没有间隙。此代码在关键字' Where'"附近提供错误"错误语法,引用查询2中的第二个WHERE。是否有办法为多个WHERE子句提供一个SET声明?是否有更好的方法来做我尝试的事情?

1 个答案:

答案 0 :(得分:2)

您应该可以使用额外的SELECT来执行此操作,假设返回了一行:

string query2 = @"
    UPDATE dbo.ExampleDB
    SET OrderID = (OrderID - 1)
    WHERE OrderID > (
        SELECT OrderID FROM dbo.ExampleDB WHERE ID = @ID
    )";