ChatGPT解决这个技术问题 Extra ChatGPT

如何在 SQL Server 中创建是/否布尔字段?

access database 转换时或一般情况下创建 yes/noBoolean 字段的最佳做法是什么?


D
Denys Bondarenko

等效项是 BIT 字段。

SQL 中,您使用 01 设置位字段(就像 Access 中的是/否字段)。在 Management Studio 中,它显示为假/真值(至少在最近的版本中)。

通过 ASP.NET 访问数据库时,它会将字段公开为布尔值。


如果您在 Access 数据库中链接表,则 true 的值为 -1,false 的值为 0。至少在 Access 2003 中。(这是我方便使用的连接到客户的 MSSQL 数据库的版本)。
请注意,它并不完全等效。如果标量函数返回位,还需要测试是0还是1。例如dbo.IsReturnsBit(value) = 1
@D-Money:是的,但是如果您想在条件中使用该值,您只需要进行比较。如果您在结果中使用该值,则不应进行比较。
Re Mgt Studio,如果您要在其中复制+粘贴数据,则还需要将其设置为 True / False,而不是 1 或 0。
M
Muhammad Waheed

BIT 数据类型通常用于存储 boolean 值(0 代表 false1 代表 true)。


您是否担心位和布尔值的语义不同?
M
Mark Byers

您可以使用 bit 列类型。


J
John Mark

您可以使用 BIT 字段。

要将 BIT 列添加到现有表,SQL 命令如下所示:

ALTER TABLE table_name ADD yes_no BIT

如果您想创建一个新表,您可以这样做:CREATE TABLE table_name (yes_no BIT)


P
P_Fitz

您可以使用数据类型 bit

插入的大于 0 的值将存储为 '1'

插入的小于 0 的值将存储为 '1'

插入为“0”的值将存储为“0”

这适用于 MS SQL Server 2012 Express


@BiLaL 这是大多数语言的常见行为。 0 为假,任何非0 数字为真。 -1 作为 true 的默认值也很常见,因为在有符号二进制文件中,它的每个位都设置为 1。如今,将 1 作为 true 的默认值(仅设置最低有效位)是很常见的。
C
Community

已经有答案说使用Bit。我将在这些答案中添加更多内容。

您应该使用 bit 来表示布尔值。

来自 MSDN 文章的备注。

Bit 可以取值 1、0 或 NULL。 SQL Server 数据库引擎优化了位列的存储。如果表中有 8 个或更少的位列,则这些列存储为 1 个字节。如果有 9 到 16 位列,则这些列存储为 2 个字节,依此类推。字符串值 TRUE 和 FALSE 可以转换为位值:TRUE 转换为 1,FALSE 转换为 0。转换为位会将任何非零值提升为 1。参考

注意:将值保留为 1 和 0 是一种很好的做法,只有数据类型为 NOT NULL

因为 Bit 具有值 1、0 和 NULL。参见真值表。因此,相应地计划价值。允许位数据类型为 NULL 值可能会增加混乱。

参考


Bit can take a value of 1, 0, or NULL. 如果位数据类型允许空值,我不必在字段定义中指定空值吗?这个定义让我觉得 [field1] [bit] NULL[field1] [bit] 是等价的?
t
torina

创建表时的示例用法:

[ColumnName]     BIT   NULL   DEFAULT 0

S
Sachith Wickramaarachchi

您可以使用 BIT 字段

要创建新表:

CREATE TABLE Tb_Table1
(
ID              INT,
BitColumn       BIT DEFAULT 1
)

在现有表中添加列:

ALTER TABLE Tb_Table1 ADD BitColumn  BIT DEFAULT 1

插入记录:

INSERT Tb_Table1 VALUES(11,0)

o
o.k.w

bit 将是最简单的,并且占用的空间也最少。与“是/否”相比不是很冗长,但我很好。


我认为这更好 - 无需担心 Y == y 和 N = n,纯真或假。意图是完全显而易见的,并且没有单字符字段邀请的“特殊”情况:)
B
Baqer Naqvi

bit 是最合适的选项。否则,我曾经为此目的使用过 int1 用于 truefalse0


通常它使用 0 表示 False,非零表示 True。
有很多口味,或者说一个好的政治家可能是真的:D
P
PatsonLeaner

在任何版本的 SQL Server Management Studio 中,使用 BIT 作为数据类型

这将为您提供 TrueFalse 值选项。如果您只想使用 10,那么您可以使用此方法:

CREATE TABLE SampleBit(
    bar int NOT NULL CONSTRAINT CK_foo_bar CHECK (bar IN (-1, 0, 1))
)

但我会严格建议将 BIT 作为 BEST 选项。完全希望它对某人有所帮助。


C
Codemaker

如果您使用 Postgres,BIT 类型将不支持它。因此,您必须使用 INT 来存储布尔类型。在这种情况下,您可以假设 0 为假,1 为真。

[ColumnName]  INT NULL  DEFAULT 0