将不确定变为确定~SQLSERVER是否可以进行位运算?

WBOY
發布: 2016-06-07 15:19:48
原創
1060 人瀏覽過

回到目录 有时,我们在设计表结构时,有的字段可能同时具有几种状态,如小微自己的文件属性也是属于这种情况的,只读,归档,隐藏,但你对一个文件设置属性时,事实上是可以将这三个属性同时赋予一个对象的,这对于我们来说是正常的,那程序内部是怎么实现的

回到目录

有时,我们在设计表结构时,有的字段可能同时具有几种状态,如小微自己的文件属性也是属于这种情况的,“只读,归档,隐藏”,但你对一个文件设置属性时,事实上是可以将这三个属性同时赋予一个对象的,这对于我们来说是正常的,那程序内部是怎么实现的呢?

首先一个枚举,SQL里可能是一张表,也可能是事先规定好的几个值,如: 只读1,归档2,隐藏3

再没有看.net源代码时,我认为可能是这样存储的

文件属性为只读+归档,值为:1,2

我们看到它是用,分开的,然后再分别去求和就可以了

但当我看了.net源代码后,我的作法有了一个变化,那就是利用位移运算,应该说从性能到程序清晰度上有一个飞跃

文件属性为只读+归档,值为:3 (3=1+2)

当然我们需要在数据库中查询出包含归档(2)的属性的记录时,如何去实现呢

其实,SQL与C#里的位移运算符号是完全相同的,它有以下几种情况

<span>1</span> <span>update</span> User_Info <span>set</span> Status <span>=</span> Status <span>|</span> <span>8</span>  <span>where</span> UserID <span>=</span> <span>1</span>  <span>--</span><span>更新user_info里的status字段,在原有基础上增加8</span>
<span>2</span> 
<span>3</span> <span>update</span> User_Info <span>set</span> Status <span>=</span> Status <span>& <span>(<span>~</span></span></span><span>8)</span> <span>where</span> UserID <span>=</span> <span>1</span> <span>--</span><span>更新user_info里的status字段,在原有基础上减去8,如果原来的值中不包含8,那会在原来的值上加上8</span> <span>4</span> <span>5</span> <span>select</span> <span>*</span> <span>from</span> <span>User</span> <span>where</span> Status <span>&</span> <span>8</span> <span>></span><span>0</span> <span>--</span><span>找到所到包括8的记录</span>
登入後複製

呵呵,怎么样,挺方便吧,这只是表面的,事实上,它在查询上性能也远远高于第一种拼接字符的方法。

回到目录

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!