sqlserver 的bit类型判断问题

isDelete(bit类型)值为1,表示已删除,判断未删除的记录时,我用 where isDelete<>1,只显示了isDelete为false(0)的记录,为空(null)的记录则没有查出来

where isnull(isDelete,0)<>1;

这样就对了,这个和int 类型的不同,如果直接用

where isnull==0  ||  isnull==1  

这样是查不出来的

### SQL Server 中 `IsDelete` 字段的数据类型推荐 在设计数据库表结构时,`IsDelete` 字段通常用于逻辑删除标记。对于这种用途,最常用的数据类型是布尔类型的替代品——`bit` 类型[^3]。 #### 使用 `bit` 数据类型的原因 - **存储空间效率高**:`bit` 是一种非常节省空间的数据类型,在 SQL Server 中仅占用 1 位 (bit),最多可以表示三个状态(0、1 和 NULL)。这非常适合用来存储简单的真/假标志。 - **语义清晰**:通过使用 `bit` 类型,开发者能够直观理解该字段的作用是一个二元选项(例如是否存在或是否已删除)。 如果采用其他整数类型如 `tinyint` 或者自定义枚举值,则可能增加不必要的复杂度并降低可读性。尽管也可以用 `byte` 表达类似的含义[^1],但在实际应用中并不常见也容易引起混淆。 因此建议将 `IsDelete` 定义为如下形式: ```sql CREATE TABLE ExampleTable ( ID INT PRIMARY KEY, Name NVARCHAR(50), IsDelete BIT NOT NULL DEFAULT 0 -- 默认未被标记为删除 ); ``` 当查询涉及此列判断记录是否已被软删时, 可以简单地写成这样: ```sql SELECT * FROM ExampleTable WHERE IsDelete = 0; ``` 另外需要注意的是,在某些ORM框架下比如Entity Framework Core里映射到C#中的属性会自动转换成 bool? (即可空布尔值),从而进一步简化业务层代码编写工作流程。 最后提醒一点关于NULL支持方面,虽然理论上允许设置为空(null),但实际上为了保持一致性最好总是给定默认值要么true要么false来避免潜在错误发生.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值