SQL会减少多个值

时间:2017-11-22 11:00:55

标签: sql sql-server

我有一个包含产品包装盒的数据库。我有一个包含盒子和产品之间关联的表格:

    mPrefs = PreferenceManager.getDefaultSharedPreferences(this);

    // second argument is the default to use if the preference can't be found
    Boolean welcomeScreenShown = mPrefs.getBoolean(welcomeScreenShownPref, false);

    if (!welcomeScreenShown) {
        startActivity(new Intent(MainActivity.this,ActiveCode.class));

        SharedPreferences.Editor editor = mPrefs.edit();
        editor.putBoolean(welcomeScreenShownPref, true);
        editor.commit();// Very important to save the preference

    }


}

我创建了一个存储过程来删除关联(将DateDelete设置为now)。但是如何编写命令以更新表中的顺序?

示例:

- GUIDParent : GUID of the product
- GUIDChild : GUID of the box
- DateDelete : if set association has been deleted
- Order : index of product in box

删除Product2:

- Product0  |  Box1  |  NULL  | 0
- Product1  |  Box1  |  NULL  | 1
- Product2  |  Box1  |  NULL  | 2
- Product3  |  Box1  |  NULL  | 3
- Product4  |  Box1  |  NULL  | 4

我实际上有(简化版):

- Product0  |  Box1  |     NULL     | 0
- Product1  |  Box1  |     NULL     | 1
- Product2  |  Box1  |  22/11/2017  | 2 (Or NULL ?)
- Product3  |  Box1  |     NULL     | 2
- Product4  |  Box1  |     NULL     | 3

1 个答案:

答案 0 :(得分:1)

既然我对你的问题了解得更好,我认为你需要更新所有行,其顺序高于'已删除'行的顺序。

所以你可以设置一个你要删除的[order]变量,如下所示:

declare @deletedOrder INT
set @deletedOrder = select [order] from ASSOTABLE 
    WHERE GUIDParent = @guidParent AND GUIDChild = @guidChild

update ASSOTABLE
set [order] = [order]-1
where [order] > @deletedOrder

这样,所有大于您删除的订单的订单将减1。

顺便说一句:由于'order'是SQL中非常常见的术语,我建议不要将它用作列名。否则,您最终会得到包含“按订单排序”等短语的查询,这可能会造成混淆甚至导致错误。就个人而言,我会使用'序列'。