使用“一条”SQL语句完成批量插入和批量删除操作

使用一条SQL语句做批量插入和删除操作

最近在做内容管理系统的时候发现一个问题:多复选框复选框操作,当全选的时候是批量往数据库中的某表插入数据,反选的时候需要批量删除表中的多行数据,删除某一条,增加某一条…由此需要频繁的对表进行修改,要考虑的情况还比较多,经个人多方实践,研究出如下“偏方”:
1. 首先是构造SQL语句:

Insert into T_Operator(F_OperatorID,F_GoodID)
(
    {Selected}
)

delete from T_Operator where F_OperatorID = {F_OperatorID} and F_MatchID in ({UnSelected})

2.参数说明:
{Selected}表示拼接的字符串:
select 6,0 union select 6,11 union select 6,12
{F_OperatorID}表示操作员的ID号:这里是6
{UnSelected}表示未选择的商品ID,格式: 0,1,2

完整的SQL语句:

Insert into T_Operator(F_OperatorID,F_GoodID)
(
    select 60  union   
    select 611 union 
    select 612
)

delete from T_Operator where F_OperatorID = 6 and F_GoodID in ({012})

意思就是在T_Operator中为F_OperatorID = 6 这个操作员增加3个物品ID分别为0,11,12的管理,插入完成后为这个操作员删除物品ID分别为0,1,2的管理,这条SQL语句在同时又增加和删除的时候是没有问题的。

那么问题来了,实际可能出现的情况是,只减少这个操作员对某个商品的管理,那么只需要执行删除操作,还有可能出现只增加操作员对某个商品的管理,那么只需要执行插入操作。

所以解释一下SQL语句中的“0”:例如当只删除F_GoodID = 8的商品的时候,为了使变量{Selected}不为空(为空报错),先插入一条6,0 数据({Selected} 为 select 6,0),然后再delete语句中{UnSelected}条件设置为0,8,这样就删除了F_GoodID为0和8的数据。达到了我们删除F_GoodID = 8的目的。SQL语句如下:

Insert into T_Operator(F_OperatorID,F_GoodID)
(
    select 60
)

delete from T_Operator where F_OperatorID = 6 and F_GoodID in ({08})

3.“偏方”解释
为何先插入0,再删除0?理由是{Selected}作为变量在SQL语句中不能为空,所以即使在只有删除操作的时候,我们为了保证SQL语句不报错,就插入F_GoodID = 0 这条数据,然后再删掉它,实际中可以是0也可以是其他内容只要没有任何意义就行。

同理在只增加F_GoodID = 8的时候,我们也为delete语句中的{UnSelected}预置0,SQL语句如下:

Insert into T_Operator(F_OperatorID,F_GoodID)
(
    select 6,0 union
    select 6,8
)

delete from T_Operator where F_OperatorID = 6 and F_GoodID in (0)

执行完以上SQL,实际上只完成了插入F_GoodID=8的操作。

以上就是所谓的使用“一条”SQL语句完成批量插入和批量删除操作,欢迎大家留言批评指正!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值