我试图从通过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声明?是否有更好的方法来做我尝试的事情?
答案 0 :(得分:2)
您应该可以使用额外的SELECT
来执行此操作,假设返回了一行:
string query2 = @"
UPDATE dbo.ExampleDB
SET OrderID = (OrderID - 1)
WHERE OrderID > (
SELECT OrderID FROM dbo.ExampleDB WHERE ID = @ID
)";