为什么SQL Server在位列中不将-1评估为True?

时间:2018-02-16 21:10:25

标签: sql sql-server ms-access

我运行查询以查找记录WHERE Column1 = -1(在bit列中查找True值)。当我在SSMS中查看表时,我看到大量的记录显示为-1值。当我在MS Access中将表作为链接表查询时,我必须将WHERE子句更改为Column1 = 1,因为Column1 = -1不会返回SSMS中的-1表示的行。

非常奇怪!

在MS Access中,我总是使用-1来获取布尔列中的True值。谁能解释一下?我没有在任何地方看到这个记录。

2 个答案:

答案 0 :(得分:3)

因为任何非零值变为1.这里在文档中提到了这一点。 https://docs.microsoft.com/en-us/sql/t-sql/data-types/bit-transact-sql

答案 1 :(得分:1)

MS Access位和ODBC sql_bit数据类型之间存在一些转换。在T-SQL中,将任何非零值转换为位会将其转换为1.因此-1变为1,或者27变为1,或者其他。所以我怀疑通过ODBC数据类型的转换导致了这种情况。