通过SQL Server的位运算功能巧妙解决多选查询方法
发布时间:2024-01-22 01:21:26
标签:位运算,多选查询
无论使用int还是varchar,对于Status的多选查询都是不易应对的。举例,常规思维下对CustomerStatus的Enum设置如下:
[Serializable]
public enum CustomerStatus
{
New = 0,
Active = 1,
Overdue = 2,
Suspended = 3,
Closing = 4,
Closed = 5
}
在数据库中以int形式存储了Status值。
如果我在页面中想一次搜索状态为Active,Overdue和Suspended状态的Customer,该怎么办?程序是不是得把这三个状态值
拼成字符串传递给SQL去处理?虽然能实现,但是相当低效。
现在给出一个标准解决方案:
(1). 所有可能被用作搜索条件的枚举都应按如下位运算方式定义。
public enum CustomerStatus
{
New = 1,
Active = 1<<1,
Overdue = 1<<2,
Suspended = 1<<3,
Closing = 1<<4,
Closed = 1<<5
}
(2). 在数据库设计时,Status的字段必须为int型。
这样当我们做多选查询时@Status的Value= CustomerStatus.Active | CustomerStatus. Overdue| CustomerStatus. Suspended
(3). 查询语句如下:
Select *
From Customer
Where [Status] & @Status = [Status]
如果@Status可为null时,
Select *
From Customer
Where ( @Status is null Or [Status] & @Status = [Status])
用这样一条简单的语句,就可以获取到所有符合@Status要求的数据行。


猜你喜欢
- TCP是建立可靠连接,并且通信双方都可以以流的形式发送数据。相对TCP,UDP则是面向无连接的协议。使用UDP协议时,不需要建立连接,只需要
- 想把python提取出来的 加载点反力和某个单元的应力画在同一个XY曲线图上,由于两者数量级差太远,故而需要建立有两个Y轴的XY曲线图。效果
- 环境变量配置首先需要将anaconda的路径配置进环境变量中,我是用户变量和系统变量都配置了。我的anaconda安装在D:\Anacond
- 目录一、scrapy 分析1. 解析函数或数据入库出错,不会重试,会造成一定的数据丢失2. 运行方式,需借助命令行,不方便调试3. 入库 p
- 前言安全性是所有数据库管理系统的一个重要特征。理解安全性问题是理解数据库管理系统安全性机制的前提。最近和同事在做数据库权限清理的事情,主要是
- 今天看了微软JScript官方blog上去年的两篇文章: http://blogs.msdn.com/jscript/archive/200
- 前言损失函数在机器学习中用于表示预测值与真实值之间的差距。一般而言,大多数机器学习模型都会通过一定的优化器来减小损失函数从而达到优化预测机器
- 导语表妹心疼我,为了逗我开心,教我用Python制作会跳舞的美女。作为新时代的活雷锋,在这里分享给大家。开发工具Python版本:3.6.4
- 阅读上一篇:你是真正的用户体验设计者吗? Ⅰwrite2vin 的 原文路宛兮写的简介:本文介绍了: 1.关于用户体验的几种观点; 2.关于
- 前言Python 提供了很多截取字符串的方法,被称为“切片(slicing)”。模版如下:strin
- 前言:对于Web开发人员,弹出框和提示框的使用肯定不会陌生,比如常见的表格新增和编辑功能,一般常见的主要有两种处理方式:行内编辑和弹出框编辑
- Git 是什么?Git 是一个分布式的代码管理容器,本地和远端都保有一份相同的代码。 Git 仓库主要是由是三部分组成:本地代码,缓存区,提
- 1、Python数据存储(压缩)(1)numpy.save , numpy.savez , scipy.io.savematnumpy和sc
- 好久没写技术相关的文章,这次写篇有意思的,关于一个有意思的游戏——QQ找茬,关于一种有意思的语言——Python,关于一个有意思的库——Qt
- 1. 线程的概念:线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程
- Python项目中很多时候会需要将时间在Datetime格式和TimeStamp格式之间转化,又或者你需要将UTC时间转化为本地时间,本文总
- 前言我们在 django-rest-framework解析请求参数 文章中完成了接口文档到参数解析, 一个完整的流程中还
- 最近基于selenium写了一个python小工具,记录下学习记录,自己运行的环境是Ubuntu 14.04.4, Python 2.7,C
- 之所以有这样一篇文章,是因为在前几天的一个晚上,要下班的时候,业务方忽然有一个需求,是需要恢复一个表里面的数据,当时问了下情况
- 下面我们以论坛排行榜举例说明:<% @ LANGUAGE="VBSCRIPT" %&