我有一个包含产品包装盒的数据库。我有一个包含盒子和产品之间关联的表格:
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
答案 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中非常常见的术语,我建议不要将它用作列名。否则,您最终会得到包含“按订单排序”等短语的查询,这可能会造成混淆甚至导致错误。就个人而言,我会使用'序列'。