zoukankan      html  css  js  c++  java
  • SQLSERVER---- 通过位运算更改标志位

      当给多个中心传输数据时,怎么标记哪些单位推送了,哪些单位没有更新,如果单独设置一个字段,一来说,扩展不足,另外会造成数据库冗余,这里可以采用SQLSERVER的位运算。

    比如说,更新标志位为0,长度为4位,对应的二进制为0000,0001表示给高德更新数据,0010表示给百度更新数据,这样做,就不会相互影响更新标记位了。具体怎么做?

    这里采用数据库的或运算(|),具体的如下:

    1,获取所有没有给高德推送的数据

      思路:没有给高德更新的数据的标志位的二进制为 xxx0,怎么获取这些数据呢?可以让最后一位与0001进行或运算,因为1|1 = 1 , 0|1 = 1,如果或运算的结果和原来的值不一样,则表示这个数据没有给高德推送过,反之,表示推送过。根据这个理论,采用下面来获取:

    select * from test a where (a.id|1) != a.id

      这样,获取的就是没有给高德推送的数据,也就是二进制格式为xxx0的数据。

    2,更新高德推送的数据

      思路:更新高德的数据就是将数据标志为设置为xxx1,那么怎么设置呢?为了不对其他的数据造成影响,这里非修改位采用与0进行或运算,修改位采用与1进行或运算,因为0|0=0,0|1=1,0进行或运算不会修改数据,1|0=1,1|1=1,1进行或运算,会将该位设置为1,所以,可以采用下面进行更新

    update test

             set id = id|1

             where name = 'test0'

    参考 http://blog.csdn.net/u012346225/article/details/38534293

  • 相关阅读:
    第二次结对编程总结
    结对编程作业博客
    现状、经验和计划
    个人总结
    6月中旬开发心得
    读《软件开发沉思录》
    团队进度汇报
    个人课程总结
    Beta阶段总结
    冲刺第十天 1.11 FRI
  • 原文地址:https://www.cnblogs.com/ningheshutong/p/8302617.html
Copyright © 2011-2022 走看看