Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Type de données SQL Server BIT - Guide ultime

Introduction au type de données Bit

Le type de données représente un attribut qui stocke un entier, un caractère, l'heure des données, des données binaires. Supposons que vous disposiez d'une application Web pour enregistrer les commentaires des utilisateurs sur diverses questions. Il contient plusieurs questions dichotomiques et quelques questions basées sur des zones de texte, telles que des remarques. Sur le backend, ces réponses sont stockées dans une table SQL.

Pour concevoir la table, nous définissons des colonnes et des types de champs de base de données. SQL Server prend en charge divers types de données tels que integer, char, varchar(), float, DateTime, numeric, etc. La même chose peut être appliquée aux types de données T-SQL. Pour en savoir plus sur les types de données, reportez-vous à la documentation officielle. Les cas d'utilisation dépendent des valeurs que nous souhaitons y stocker.

Supposons que nous ayons des colonnes spécifiques dans cette table que nous avons créée. Ces colonnes acceptent les valeurs booléennes 1,0 ou TRUE\False. SQL. Par conséquent, dans SQL Server, un type de données booléen particulier - Bit est fourni.

Le SQL Server Bit est un type de données entier qui accepte les valeurs 0,1 et NULL. Il est disponible dans toutes les versions de SQL Server, y compris Azure SQL Server, Azure Managed Instances et SQL sur Azure VM.

Stockage des types de données binaires

En termes de stockage, le type de données Bit est optimisé par SQL Server. Si vous avez huit colonnes Bit ou moins dans la table, SQL Server les stocke sous la forme de 1 octet. De même, pour les colonnes de 9 à 16 bits, il consomme 2 octets. De plus, SQL Server convertit les valeurs String TRUE et FALSE en leurs valeurs correspondantes 1 et 0.

Syntaxe

La syntaxe du type de données BIT dans SQL Server est simple :

 Bit

Utilisation pratique du type de données Bit

Le script T-SQL suivant crée une table de produits et y insère deux valeurs de données de produits :

  • Si le produit est disponible, le bit de la colonne [Disponible] est mis à 1.
  • Si le produit n'est pas disponible, le bit de la colonne [Disponible] est mis à 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

Tronquons la table [Products] et insérons ses valeurs en utilisant les chaînes TRUE et False.

TRUNCATE TABLE Products
INSERT INTO Products (productname,available) values('A','TRUE')
INSERT INTO Products (productname,available) values('B','False')
GO
SELECT * FROM Products

Comme indiqué ci-dessous, SQL Server convertit la chaîne TRUE en 1 et False en 0.

Cependant, si vous essayez d'insérer d'autres valeurs, telles que Oui ou Non, dans le type de données Bit, vous obtenez le message d'erreur "Échec de la conversion".

INSERT INTO Products (productname,available) values('A','Yes')

Lorsque vous insérez une valeur différente de zéro dans la colonne Type de données Bit, SQL Server convertit cette valeur en un. Par exemple, dans le script suivant, nous insérons la valeur 100 dans la colonne [disponible]. Aucun message d'erreur ne se produit pendant ce temps.

Si vous sélectionnez des enregistrements, vous validez que la valeur insérée est 1.

INSERT INTO Products (productname,available) values('A',100)
SELECT * FROM Products;

De même, SQL Server convertit la valeur négative en valeur 1 dans la colonne Bit. Comme indiqué ci-dessous, nous insérons la valeur -100 dans la colonne [disponible]. Nous recevons la valeur un lors de sa récupération :

INSERT INTO Products (productname,available) values('A',-100)
SELECT * FROM Products;

Auparavant, nous utilisions le type de données Bit pour vérifier la disponibilité du produit. Nous avons généralement besoin d'afficher du texte sur le front-end au lieu des bits 1 et 0. Par conséquent, nous pouvons utiliser l'instruction CASE dans SQL Server.

Dans le code T-SQL suivant, l'instruction CASE renvoie :

  • Valeur 1 :le produit est disponible
  • Valeur 0 :Rupture de stock
SELECT [ProductName], CASE [Available]
         WHEN 1 then  'Product is available.'
        WHEN 0 then 'Out of Stock'
        ELSE 'NA'
    END AS [Availability]
from products

Comme nous avons pu le voir précédemment, SQL Server optimise le stockage pour le type de données Bit. Le [TestTable] suivant a huit colonnes avec le type de données Bit ; par conséquent, il utilise 1 octet pour le stockage.

CREATE TABLE TestTable (
    [Column1] Bit,
    [Column2] Bit,
    [Column3] Bit,
    [Column4] Bit,
    [Column5] Bit,
    [Column6] Bit,
    [Column7] Bit,
    [Column8] Bit,
);

Alternativement, si vous utilisez tinyint ou Type de données Char(1) , il consommerait 1 octet pour chaque colonne. Vous devez utiliser le type de données Bit, alors que vous avez besoin d'une valeur booléenne.

Vous pouvez également utiliser le type de données Bit dans des procédures stockées ou des fonctions qui renvoient des valeurs booléennes. Par exemple, nous avons le fn_customer() fonction qui vérifie l'identifiant du client, et si elle existe, elle renvoie une valeur sinon elle renvoie 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

Cette fonction requiert l'ID client comme paramètre d'entrée. Si nous l'exécutons avec l'ID client 10, vous obtenez le message suivant :

IF (dbo.fn_customer(10)=1)
   PRINT 'Customer record is available'
ELSE 
   PRINT 'Customer record is not available'

Cependant, si l'ID client n'existe pas dans le [SalesLT].[Customer] table, la fonction renvoie la valeur 0. La condition du bloc IF n'est pas vraie. Par conséquent, vous obtenez le message spécifié dans la clause ELSE :

Conclusion

Le type de données MSSQL Boolean type de données Bit est utile pour les colonnes acceptant les valeurs 0,1 ou NULL. SQL Server optimise le stockage du type de données Bit; par conséquent, cela rend le code compact et efficace. De même, vous pouvez l'utiliser pour renvoyer des valeurs booléennes à partir d'une procédure ou d'une fonction stockée.

Lire aussi

Gérer efficacement les valeurs NULL avec la fonction SQL COALESCE pour les débutants