sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Server BIT Datatype – Ultimate Guide

Introduktion till bitdatatyp

Datatypen representerar ett attribut som lagrar heltal, tecken, datatid, binär data. Anta att du har en webbapplikation för att registrera användarnas feedback för olika frågor. Den innehåller flera dikotoma frågor och några textrutabaserade frågor, till exempel anmärkningar. På baksidan lagras dessa svar i en SQL-tabell.

För att designa tabellen definierar vi kolumner och databasfälttyper. SQL Server stöder olika datatyper som heltal, char, varchar(), float, DateTime, numeric, etc. Detsamma kan tillämpas på T-SQL-datatyper. För att lära dig mer om datatyperna, se den officiella dokumentationen. Användningsfallen beror på de värden vi vill lagra i dem.

Anta att vi har specifika kolumner i den tabellen vi har skapat. Dessa kolumner accepterar booleska värden 1,0 eller TRUE\False. SQL. Därför, i SQL Server, en viss boolesk datatyp – Bit tillhandahålls.

SQL Server Bit är en heltalsdatatyp som accepterar 0,1 och NULL värden. Den är tillgänglig i alla SQL Server-versioner, inklusive Azure SQL Server, Azure Managed Instances och SQL på Azure VM.

Lagring av bitdatatyp

När det gäller lagring optimeras bitdatatypen av SQL Server. Om du har åtta eller färre bitkolumner i tabellen, lagrar SQL Server dem som 1 byte. På samma sätt, för 9 till 16-bitars kolumner, förbrukar den 2 byte. Dessutom konverterar SQL Server strängvärden TRUE och FALSE till motsvarande värden 1 och 0.

Syntax

Syntaxen för BIT-datatypen i SQL Server är enkel:

 Bit

Praktisk användning av bitdatatyp

Följande T-SQL-skript skapar en produkttabell och infogar två produktdatavärden i den:

  • Om produkten är tillgänglig är kolumnbiten [Tillgänglig] satt till 1.
  • Om produkten inte är tillgänglig ställs kolumnen [Tillgänglig] in på 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

Låt oss trunkera tabellen [Produkter] och infoga dess värden med strängarna TRUE och False.

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

Som visas nedan konverterar SQL Server strängen TRUE till 1 och False till 0.

Men om du försöker infoga andra värden, såsom Ja eller Nej, i bitdatatypen får du felmeddelandet "Konverteringen misslyckades".

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

När du infogar ett värde som inte är noll i kolumnen Bitdatatyp konverterar SQL Server det värdet till ett. Till exempel, i följande skript infogar vi värde 100 i kolumnen [tillgänglig]. Inga felmeddelanden händer samtidigt.

Om du väljer poster validerar du att det infogade värdet är 1.

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

På liknande sätt konverterar SQL Server det negativa värdet till värdet 1 i kolumnen Bit. Som visas nedan infogar vi värdet -100 i kolumnen [tillgänglig]. Vi får värde ett när vi hämtar det:

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

Tidigare använde vi datatypen Bit för att kontrollera produktens tillgänglighet. Vi behöver vanligtvis visa text i front-end istället för bit 1 och 0. Därför kan vi använda CASE-satsen i SQL Server.

I följande T-SQL-kod returnerar CASE-satsen:

  • Värde 1:Produkten är tillgänglig
  • Värde 0:Slut i lager
SELECT [ProductName], CASE [Available]
         WHEN 1 then  'Product is available.'
        WHEN 0 then 'Out of Stock'
        ELSE 'NA'
    END AS [Availability]
from products

Som vi kunde se tidigare optimerar SQL Server lagringen för bitdatatypen. Följande [Testtabell] har åtta kolumner med datatypen Bit; därför använder den 1 byte för lagring.

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

Alternativt, om du använder tinyint eller Datatyp Char(1) , skulle det förbruka 1 byte för varje kolumn. Du bör använda datatypen Bit, medan du behöver booleskt värde.

Du kan också använda datatypen Bit i lagrade procedurer eller funktioner som returnerar booleska värden. Till exempel har vi fn_customer() funktion som kontrollerar kund-id, och om det finns returnerar det värde ett annat returnerar det 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

Denna funktion kräver kund-ID som indataparameter. Om vi ​​kör det med kund-ID 10 får du följande meddelande:

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

Men om kund-ID inte finns i [SalesLT].[Kund] tabell returnerar funktionen värdet 0. IF-blockvillkoret är inte sant. Därför får du meddelandet som anges i ELSE-satsen:

Slutsats

Den booleska MSSQL-datatypen-Bit-datatypen är användbar för kolumner som accepterar värdena 0,1 eller NULL. SQL Server optimerar lagringen av bitdatatyp; därför gör det koden kompakt och effektiv. På samma sätt kan du använda den för att returnera booleska värden från en lagrad procedur eller funktion.

Läs också

Hantera NULL-värdena effektivt med SQL COALESCE-funktionen för nybörjare


  1. Concat-funktionen fungerar inte - ogiltigt antal argument

  2. SQLite - Släpp en tabell

  3. Hur man aktiverar komprimering på en befintlig tabell i SQL Server (T-SQL)

  4. framåt cross edition triggers i R12.2