Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Tipo de dados SQL Server BIT – Guia definitivo

Introdução ao tipo de dados de bits


O tipo de dados representa um atributo que armazena inteiro, caractere, hora de dados, dados binários. Suponha que você tenha um aplicativo da web para registrar o feedback dos usuários para várias perguntas. Ele contém várias perguntas dicotômicas e algumas perguntas baseadas em caixa de texto, como observações. No back-end, essas respostas são armazenadas em uma tabela SQL.

Para projetar a tabela, definimos colunas e tipos de campo do banco de dados. SQL Server suporta vários tipos de dados como integer, char, varchar(), float, DateTime, numeric, etc. O mesmo pode ser aplicado aos tipos de dados T-SQL. Para saber mais sobre os tipos de dados, consulte a documentação oficial. Os casos de uso dependem dos valores que desejamos armazenar neles.

Suponha que tenhamos colunas específicas nessa tabela que criamos. Essas colunas aceitam valores booleanos 1,0 ou TRUE\False. SQL. Portanto, no SQL Server, um tipo de dados booleano específico – Bit é fornecido.

O SQL Server Bit é um tipo de dados inteiro que aceita valores 0,1 e NULL. Ele está disponível em todas as versões do SQL Server, incluindo Azure SQL Server, Azure Managed Instances e SQL na VM do Azure.

Armazenamento de tipo de dados de bits


Em termos de armazenamento, o tipo de dados Bit é otimizado pelo SQL Server. Se você tiver oito ou menos colunas de bits na tabela, o SQL Server as armazenará como 1 byte. Da mesma forma, para colunas de 9 a 16 bits, ele consome 2 bytes. Além disso, o SQL Server converte os valores String TRUE e FALSE em seus valores correspondentes 1 e 0.

Sintaxe


A sintaxe do tipo de dados BIT no SQL Server é direta:
 Bit

Uso prático do tipo de dados de bits


O script T-SQL a seguir cria uma tabela de produtos e insere dois valores de dados de produtos nela:
  • Se o produto estiver disponível, o bit [Available] da coluna será definido como 1.
  • Se o produto não estiver disponível, o bit [Available] da coluna será definido como 0.
CREATE TABLE Products (
    [ProductName] varchar(20),
    [Available] BIT
);
Go
INSERT INTO Products (productname,available) values('A',1)
INSERT INTO Products (productname,available) values('B',0)
GO
SELECT * FROM Products

Vamos truncar a tabela [Products] e inserir seus valores usando as strings TRUE e False.
TRUNCATE TABLE Products
INSERT INTO Products (productname,available) values('A','TRUE')
INSERT INTO Products (productname,available) values('B','False')
GO
SELECT * FROM Products

Conforme mostrado abaixo, o SQL Server converte a string TRUE em 1 e False em 0.

No entanto, se você tentar inserir outros valores, como Sim ou Não, no tipo de dados Bit, receberá a mensagem de erro “Falha na conversão”.
INSERT INTO Products (productname,available) values('A','Yes')

Quando você insere qualquer valor diferente de zero na coluna tipo de dados Bit, o SQL Server converte esse valor em um. Por exemplo, no script a seguir, inserimos o valor 100 na coluna [disponível]. Nenhuma mensagem de erro acontece enquanto isso.

Se você selecionar registros, validará que o valor inserido é 1.
INSERT INTO Products (productname,available) values('A',100)
SELECT * FROM Products;

Da mesma forma, o SQL Server converte o valor negativo para o valor 1 na coluna Bit. Conforme mostrado abaixo, inserimos o valor -100 na coluna [disponível]. Recebemos o valor um ao recuperá-lo:
INSERT INTO Products (productname,available) values('A',-100)
SELECT * FROM Products;

Anteriormente, usávamos o tipo de dados Bit para verificar a disponibilidade do produto. Geralmente, precisamos exibir texto no front-end em vez dos bits 1 e 0. Portanto, podemos usar a instrução CASE no SQL Server.

No código T-SQL a seguir, a instrução CASE retorna:
  • Valor 1:o produto está disponível
  • Valor 0:esgotado
SELECT [ProductName], CASE [Available]
         WHEN 1 then  'Product is available.'
        WHEN 0 then 'Out of Stock'
        ELSE 'NA'
    END AS [Availability]
from products

Como vimos anteriormente, o SQL Server otimiza o armazenamento para o tipo de dados Bit. O seguinte [TestTable] tem oito colunas com o tipo de dados Bit; portanto, ele usa 1 byte para armazenamento.
CREATE TABLE TestTable (
    [Column1] Bit,
    [Column2] Bit,
    [Column3] Bit,
    [Column4] Bit,
    [Column5] Bit,
    [Column6] Bit,
    [Column7] Bit,
    [Column8] Bit,
);

Como alternativa, se você usar tinyint ou tipo de dados Char(1) , consumiria 1 byte para cada coluna. Você deve usar o tipo de dados Bit, enquanto você precisa do valor booleano.

Você também pode usar o tipo de dados Bit em procedimentos armazenados ou funções que retornam valores booleanos. Por exemplo, temos o fn_customer() função que verifica o id do cliente, e se existir, retorna o valor um mais retorna 0.
CREATE FUNCTION fn_customer
(
   @CustomerID INT
)
RETURNS bit
AS
BEGIN
IF EXISTS (
SELECT [CustomerID] FROM [SalesLT].[Customer] 
WHERE [CustomerID][email protected] 
)
      RETURN 1
    RETURN 0
 END

Esta função requer o ID do cliente como parâmetro de entrada. Se o executarmos com o ID de cliente 10, você receberá a seguinte mensagem:
IF (dbo.fn_customer(10)=1)
   PRINT 'Customer record is available'
ELSE 
   PRINT 'Customer record is not available'

No entanto, se o ID do cliente não existir em [SalesLT].[Cliente] tabela, a função retorna o valor 0. A condição do bloco IF não é verdadeira. Portanto, você obtém a mensagem especificada na cláusula ELSE:

Conclusão


O tipo de dados MSSQL Boolean tipo de dados Bit é útil para colunas que aceitam valores 0,1 ou NULL. O SQL Server otimiza o armazenamento do tipo de dados Bit; portanto, torna o código compacto e eficiente. Da mesma forma, você pode usá-lo para retornar valores booleanos de um procedimento armazenado ou função.

Leia também


Manipulando os valores NULL efetivamente com a função SQL COALESCE para iniciantes