📜  如何在 SQL 中向现有表添加布尔数据类型列?

📅  最后修改于: 2022-05-13 01:54:36.891000             🧑  作者: Mango

如何在 SQL 中向现有表添加布尔数据类型列?

在 SQL Server 中,可以通过保留 BIT 数据类型来创建布尔数据类型。尽管它是数字数据类型,但它只能接受 0 或 1 或 NULL 值。因此,我们可以轻松地将 FALSE 值指定为 0,将 TRUE 值指定为 1。这将为数据类型提供布尔性质。

关于存储,如果表中的位数据少于9列,则以1个字节存储。对于 9 到 16 BIT 列,它们的消耗是 2 个字节,依此类推。在本文中,让我们介绍如何向 SQL SERVER 中的现有表添加布尔值,即 BIT 数据类型。

让我们假设有一个数据库“GEEKSFORGEEKS”可用,并且有一个名为“Authors”的表可用,其中包含以下数据。

询问:

USE GEEKSFORGEEKS
SELECT * FROM Authors;

输出:

让我们将 BIT 数据类型添加到“Authors”表中。 Bit 数据类型有助于表示 True(1) 或 False(0) 的布尔性质,它们是 BIT 数据类型唯一允许的值。

-- Add a column named "isActiveAuthor" 
with BIT datatype for "Authors" table
ALTER TABLE Authors  ADD isActiveAuthor BIT;

由于表中已经有几行可用,我们只能添加一个新列“isActiveAuthor”作为 NULL 模式。之后,我们可以更新数据。添加列后,

询问:

SELECT * FROM Authors;

输出:

因此,当将 BIT 数据类型列添加到现有表时,其值将填充为“NULL”值。

现在让我们尝试更新列,如果“NumberOfPosts”> 5,则将“isActiveAuthor”设置为值 1 或 0。

-- Let us assume that if "NumberOfPosts" 
   is more than 5, author is active enough to write articles
-- Hence for this condition , set "isActiveAuthor"
   column to have value 1
UPDATE Authors SET isActiveAuthor = 1 WHERE NumberOfPosts > 5;

-- On the ohter hand, if "NumberOfPosts"
   is less  than and equal to 5, 
-- author is not active in the recent days
   and hence set "isActiveAuthor" column to have value 0
UPDATE Authors SET isActiveAuthor = 0 WHERE NumberOfPosts <= 5;

SELECT * FROM Authors;

输出:

由于 BIT 列仅支持 0 或 1 作为值,因此我们已按上述方式填充。

让我们尝试更新 0 或 1 以外的值

-- Trying to update the "isActiveAuthor"
   with value 2, though errors are not 
   produced, output is different
UPDATE Authors SET isActiveAuthor = 
2 WHERE NumberOfPosts = 5;

SELECT * FROM Authors;

输出:

第 3 行中更新值为 1 的原因:

尽管进行了更新以获得值 2,但由于“isActiveAuthor”列的“BIT”数据类型,它的值仅转换为 1,因为“BIT”数据类型仅支持 0 或 1。即 0 以外的值转换为 1 并在表中更新。

我们可以用不同的例子在这里检查相同的

DECLARE @isValid BIT

-- Initially it will have "NULL" value 
SELECT @isValid AS BitType
 
--Assigning any nonzero value converts it to 1
-- i.e. other than 0, if any
   value is provided , it is converted to 1
SET @isValid=9
 
SELECT @isValid AS BitType
 
--Assigning any nonzero value converts it to 1
SET @isValid=-100
 
SELECT @isValid AS BitType

输出:

这证明“BIT”数据类型只接受“Boolean”值,即仅 0 或 1。如果给出了一个非零值,它只会被转换为 1。

好处 :

  • 总是如果预期值是 0 或 1 加 NULL,当代码变得合乎逻辑时,将列保持为“BIT”数据类型是一种很好的方法
  • 关于存储,使用起来很经济,因为与其他数据类型相比,它需要一点空间。

综合考虑优点,BIT 数据类型是存储布尔数据的正确方法