Introduktion til bitdatatype
Datatypen repræsenterer en attribut, der gemmer heltal, tegn, datatid, binære data. Antag, at du har en webapplikation til at registrere brugernes feedback til forskellige spørgsmål. Den indeholder flere dikotomiske spørgsmål og nogle få tekstboksbaserede spørgsmål, såsom bemærkninger. På backend bliver disse svar gemt i en SQL-tabel.
For at designe tabellen definerer vi kolonner og databasefelttyper. SQL Server understøtter forskellige datatyper såsom heltal, char, varchar(), float, DateTime, numerisk osv. Det samme kan anvendes på T-SQL datatyper. For at lære mere om datatyperne henvises til den officielle dokumentation. Brugstilfældene afhænger af de værdier, vi ønsker at gemme i dem.
Antag, at vi har specifikke kolonner i den tabel, vi har oprettet. Disse kolonner accepterer boolske værdier 1,0 eller TRUE\False. SQL. Derfor, i SQL Server, en bestemt boolsk datatype – Bit leveres.
SQL Server Bit er en heltal datatype, der accepterer 0,1 og NULL værdier. Den er tilgængelig i alle SQL Server-versioner, inklusive Azure SQL Server, Azure Managed Instances og SQL på Azure VM.
Lagring af bitdatatype
Med hensyn til lagring er Bit-datatypen optimeret af SQL Server. Hvis du har otte eller færre bitkolonner i tabellen, gemmer SQL Server dem som 1 byte. Tilsvarende bruger den 2 bytes for 9 til 16-bit kolonner. Derudover konverterer SQL Server strengværdier TRUE og FALSE til deres tilsvarende værdier 1 og 0.
Syntaks
Syntaksen for BIT-datatypen i SQL Server er ligetil:
Bit
Praktisk brug af bitdatatype
Følgende T-SQL-script opretter en produkttabel og indsætter to produktdataværdier i den:
- Hvis produktet er tilgængeligt, er kolonnen [Tilgængelig] bit sat til 1.
- Hvis produktet ikke er tilgængeligt, er kolonnen [Tilgængelig] bit sat til 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
Lad os afkorte [Produkter]-tabellen og indsætte dens værdier ved hjælp af TRUE- og False-strengene.
TRUNCATE TABLE Products
INSERT INTO Products (productname,available) values('A','TRUE')
INSERT INTO Products (productname,available) values('B','False')
GO
SELECT * FROM Products
Som vist nedenfor konverterer SQL Server strengen TRUE til 1 og False til 0.
Men hvis du forsøger at indsætte andre værdier, såsom Ja eller Nej, i Bit-datatypen, får du fejlmeddelelsen "Konvertering mislykkedes".
INSERT INTO Products (productname,available) values('A','Yes')
Når du indsætter en værdi, der ikke er nul, i kolonnen Bit-datatype, konverterer SQL Server denne værdi til én. For eksempel, i det følgende script indsætter vi værdi 100 i kolonnen [tilgængelig]. Der sker ingen fejlmeddelelser imens.
Hvis du vælger poster, validerer du, at den indsatte værdi er 1.
INSERT INTO Products (productname,available) values('A',100)
SELECT * FROM Products;
På samme måde konverterer SQL Server den negative værdi til værdi 1 i Bit-kolonnen. Som vist nedenfor indsætter vi værdien -100 i kolonnen [tilgængelig]. Vi modtager værdi én, mens vi henter den:
INSERT INTO Products (productname,available) values('A',-100)
SELECT * FROM Products;
Tidligere brugte vi Bit-datatypen til at kontrollere produktets tilgængelighed. Vi skal normalt vise tekst i frontend i stedet for bit 1 og 0. Derfor kan vi bruge CASE-sætningen i SQL Server.
I den følgende T-SQL-kode returnerer CASE-sætningen:
- Værdi 1:Produktet er tilgængeligt
- Værdi 0:Ikke på 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 kunne se tidligere, optimerer SQL Server lagringen til Bit-datatypen. Følgende [TestTable] har otte kolonner med Bit-datatypen; derfor bruger den 1 byte til lagring.
CREATE TABLE TestTable (
[Column1] Bit,
[Column2] Bit,
[Column3] Bit,
[Column4] Bit,
[Column5] Bit,
[Column6] Bit,
[Column7] Bit,
[Column8] Bit,
);
Alternativt, hvis du bruger tinyint eller Char(1) datatype , ville det forbruge 1 byte for hver kolonne. Du bør bruge Bit-datatypen, mens du kræver boolsk værdi.
Du kan også bruge Bit-datatypen i lagrede procedurer eller funktioner, der returnerer booleske værdier. For eksempel har vi fn_customer() funktion, der kontrollerer kunde-id'et, og hvis det eksisterer, returnerer det værdien en anden returnerer den 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
Denne funktion kræver kunde-id som inputparameter. Hvis vi udfører det med kunde-id 10, får du følgende besked:
IF (dbo.fn_customer(10)=1)
PRINT 'Customer record is available'
ELSE
PRINT 'Customer record is not available'
Men hvis kunde-id'et ikke findes i [SalesLT].[Kunde] tabel, returnerer funktionen værdien 0. HVIS-blokbetingelsen er ikke sand. Derfor får du beskeden angivet i ELSE-sætningen:
Konklusion
Den boolske MSSQL-datatype-Bit-datatype er nyttig til kolonner, der accepterer værdierne 0,1 eller NULL. SQL Server optimerer Bit-datatypelagringen; derfor gør det koden kompakt og effektiv. På samme måde kan du bruge det til at returnere booleske værdier fra en lagret procedure eller funktion.
Læs også
Håndtering af NULL-værdierne effektivt med SQL COALESCE-funktionen for begyndere