摘要:二态值字段的使用注意事项,技巧,问题解决办法
正文:
目前各位使用 进行开发的老家伙们对于后台数据库,普遍的模式是:
起初先使用 作为数据库,然后在使用中不断完善。一段时间后,软件变复杂了,数据量也变大了,原来的 数据库就跟不上。这个时候就会升级为 SQL 数据库。
当然,这也是我们推荐的方式。逐步推进,慢慢累积,只要你能坚持下来,基本上很难失败。而如果想要一口吃成胖子,一次性就要上一个大而全的系统,基本上都是死路一条。
为什么我一开头说老家伙们?嘿嘿,因为小家伙是不会有这种经验体会的。
以上都是水字数的,下面言归正传,回到本文主题。在 中有一种字段数据类型叫做“是/否”型。当升级到 SQL 后,其对应的字段类型是“bit”。
根据我们直观看到的,我们会认为:
因为数据库本身的特点,这2种字段还有一种情况,即它的值是 Null。不过严格来说,Null 并不是值,而是一种表示“未知”的状态。这个问题我们稍后再讨论。
严格意义来讲,在 中 True 和 False 只是 2 个关键字。True 的值等于 -1,False 的值等于 0。因此 True 和 Flase 相当于 VBA 中的常量,即用一个有明确意义的名称代替数值,让代码易读。
因此在用来进行判断时,我们可以写成这样:
用于判断条件时的写法
数据库类型
值为真时的写法
值为假时的写法
写法1:Where 字段A=True
写法2:Where 字段A=-1
写法1:Where字段A=False
写法2:Where字段A=0
SQL
字段A=1
字段A=0
反过来讲,根据不同数据类型之间的转换方式,0 是 False,其它非 0 是 True。
我们更新数据时,可以有这样一些写法:
用于数据更新时的写法
数据库类型
值为真时的写法
值为假时的写法
写法1:SET字段A=True
写法2:SET字段A=-1
写法3:SET字段A=1
写法4:SET字段A=2
写法5:SET字段A=-2
写法6:SET字段A=3
写法7:SET字段A=999
写法N:……
写法1:SET 字段A=False
写法2:SET字段A=0
SQL
写法1:SET字段A=1
写法2:SET字段A=-1
写法3:SET字段A=2
写法4:SET字段A=-2
写法5:SET字段A=3
写法6:SET字段A=999
写法N:……
SET 字段A=0
综上,我们可以得出一种可以通用于两种不同数据库的写法:
和 SQL 中所有可用的写法
统一的通用写法
判断条件
写法1:Where 字段A=True
写法2:Where 字段A=-1
写法3:Where字段A=1
Where 字段A0
写法1:Where字段A=False
写法2:Where字段A=0
Where字段A=0
更新数据
写法1:SET字段A=True
写法2:SET字段A=-1
写法3:SET字段A=1
写法4:SET字段A=2
写法5:SET字段A=-2
写法6:SET字段A=3
写法7:SET字段A=999
写法N:……
SET字段A=1
写法1:SET字段A=False
写法2:SET字段A=0
SET字段A=0
可能有人会问: 中True的值是 -1 呀,为什么也可以用 “SET 字段A=1”甚至“SET字段A=999”这样的写法呢?
这是因为不同的数据类型是有自动转换功能的,你写入数据时,任何非零值都会被转换为True(也就是-1)!
也就是说 SET 字段A=-2、SET 字段A = 1、SET 字段A=2、SET 字段A=999,都是可以的,但最终保存后,它们都是变成了-1。
只不过为了不引起别人(甚至自己)迷惑,在统一的写法中都用 SET 字段A=1 这种方式。
好了,记住这个最终写法,你就可以以不变应万变,再也不用纠结了。是不是爽歪歪?
不好意思,各位乘客请坐好,老司机要调一下头。
我们再回头来说一下前面提到的 Null 问题,Null 的含义是我不知道这个字段有没有值,对于是否类型或者bit类型,Null 就是说我不知道它是不是True,但我也不知道它是不是False。
这样一来,是能够达成理论完善了,但实际上给我们造成很多麻烦,初学者很容易在这个问题上被困扰。
而且当你将数据保存在 SQL ,然后在 中使用链接表链接过来时,还会出现一个奇怪的 BUG:
如果表中的bit类型字段有 Null 值时,你添加或修改数据时,都会出现下面这样的写入冲突提示。
实际上这个问题就是因为bit类型字段中有Null值造成的,和写入冲突没有五毛钱关系。
然后很多小朋友不知道,就一直在写入冲突这个方向去想,最后就被搞崩溃了:现在就我自己在使用,哪里来的鬼的其他人啊啊啊啊啊???!!!
为了避免 Null 值造成的这些乱七八糟的问题,除非你明确有特殊需求,否则一般情况下,本公子的建议是:
如此这般,我们就可以安享晚年,不用再操碎心了。
软件网官方交流QQ群 (群号:)源码网店