等效于 Access BOOLEAN 类型的 SQL Server 的列定义

mwo*_*e02 6 ms-access sql-server ddl

Access 中的 BOOLEAN 数据类型(即 Jet/ACE)为 True 返回 -1,为 False 返回 0;该字段始终是必需的(即,它不能设置为 NULL)。SQL Server BIT 类型为 True 返回 1,为 False 返回 0,并且还允许 NULL。

我正在寻找一个 T-SQL 列定义,使用 smallint、检查约束和 NOT NULL 的组合来复制 Jet/ACE BOOLEAN 数据类型的功能。换句话说,该列只接受值 0 和 -1。

Aar*_*and 4

为了解决您对 BIT 的担忧:

  1. 您可以将 BIT 列设置为 NOT NULL。
  2. 将BIT 列设置为“true”时可以使用 -1 。
  3. 您可以创建一个转换为 -1 的视图,但无论如何 +1 都应该没问题,除非您的应用程序显式检查数字 -1(在您的客户端语言中除零以外的任何值都应该产生 true)。
CREATE TABLE dbo.foo(bar BIT NOT NULL, blat BIT NOT NULL);

INSERT dbo.foo SELECT -1, 0;

SELECT bar, blat, -CONVERT(SMALLINT, bar), -CONVERT(SMALLINT, blat) FROM dbo.foo;
Run Code Online (Sandbox Code Playgroud)

结果:

bar   blat   
----  ----  ----  ----
1     0     -1    0
Run Code Online (Sandbox Code Playgroud)

BIT 相对于 TINYINT/SMALLINT 的好处是,如果您有 1-8 BIT 列,它们可以放入单个字节中。

在所有这些情况下,你仍然不能说

WHERE NOT BooleanColumn
-- or
WHERE !BooleanColumn
Run Code Online (Sandbox Code Playgroud)

你还是要说

WHERE BooleanColumn = 0
Run Code Online (Sandbox Code Playgroud)