sql >> Database >  >> RDS >> Sqlserver

SQL Server BIT-gegevenstype – Ultieme gids

Inleiding tot het bitgegevenstype

Het datatype vertegenwoordigt een attribuut dat integer, karakter, datatijd en binaire data opslaat. Stel dat u een webapplicatie heeft om de feedback van gebruikers op verschillende vragen vast te leggen. Het bevat meerdere dichotome vragen en enkele op tekstvakken gebaseerde vragen, zoals opmerkingen. Op de backend worden deze antwoorden opgeslagen in een SQL-tabel.

Om de tabel te ontwerpen, definiëren we kolommen en databaseveldtypen. SQL Server ondersteunt verschillende gegevenstypen, zoals integer, char, varchar(), float, DateTime, numeriek, enz. Hetzelfde kan worden toegepast op T-SQL-gegevenstypen. Raadpleeg de officiële documentatie voor meer informatie over de gegevenstypen. De use-cases zijn afhankelijk van de waarden die we erin willen opslaan.

Stel dat we specifieke kolommen hebben in die tabel die we hebben gemaakt. Die kolommen accepteren Booleaanse waarden 1,0 of TRUE\False. Sql. Daarom is in SQL Server een bepaald Booleaans gegevenstype – Bit is voorzien.

De SQL Server Bit is een gegevenstype met een geheel getal dat 0,1 en NULL-waarden accepteert. Het is beschikbaar in alle SQL Server-versies, inclusief Azure SQL Server, Azure Managed Instances en SQL op Azure VM.

Bit gegevenstype opslag

Qua opslag wordt het datatype Bit geoptimaliseerd door de SQL Server. Als u acht of minder Bit-kolommen in de tabel hebt, slaat SQL Server deze op als 1 byte. Evenzo verbruikt het voor kolommen van 9 tot 16 bit 2 bytes. Bovendien converteert SQL Server de tekenreekswaarden TRUE en FALSE naar hun corresponderende waarden 1 en 0.

Syntaxis

De syntaxis van het BIT-gegevenstype in SQL Server is eenvoudig:

 Bit

Praktisch gebruik van bitgegevenstype

Het volgende T-SQL-script maakt een producttabel en voegt daarin twee productgegevenswaarden in:

  • Als het product beschikbaar is, is de kolom [Beschikbaar] bit ingesteld op 1.
  • Als het product niet beschikbaar is, wordt de kolom [Beschikbaar] bit ingesteld op 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

Laten we de tabel [Producten] afkappen en de waarden invoegen met behulp van de tekenreeksen TRUE en False.

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

Zoals hieronder wordt getoond, converteert SQL Server de tekenreeks TRUE naar 1 en False naar 0.

Als u echter andere waarden, zoals Ja of Nee, probeert in te voeren in het gegevenstype Bit, krijgt u het foutbericht 'Conversie mislukt'.

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

Wanneer u een waarde die niet nul is in de kolom Bit-gegevenstype invoegt, converteert SQL Server die waarde naar één. In het volgende script voegen we bijvoorbeeld waarde 100 in de kolom [beschikbaar] in. Ondertussen gebeuren er geen foutmeldingen.

Als u records selecteert, valideert u dat de ingevoegde waarde 1 is.

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

Op dezelfde manier converteert SQL Server de negatieve waarde naar waarde 1 in de Bit-kolom. Zoals hieronder wordt weergegeven, voegen we waarde -100 in de [beschikbare] kolom in. We ontvangen waarde één terwijl we deze ophalen:

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

Voorheen gebruikten we het gegevenstype Bit om de productbeschikbaarheid te controleren. Meestal moeten we tekst aan de voorkant weergeven in plaats van bits 1 en 0. Daarom kunnen we de CASE-instructie in SQL Server gebruiken.

In de volgende T-SQL-code retourneert de CASE-instructie:

  • Waarde 1:product is beschikbaar
  • Waarde 0:Niet op voorraad
SELECT [ProductName], CASE [Available]
         WHEN 1 then  'Product is available.'
        WHEN 0 then 'Out of Stock'
        ELSE 'NA'
    END AS [Availability]
from products

Zoals we eerder konden zien, optimaliseert SQL Server de opslag voor het gegevenstype Bit. De volgende [TestTable] heeft acht kolommen met het datatype Bit; daarom gebruikt het 1 byte voor opslag.

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

Als alternatief, als u tinyint . gebruikt of Char(1) gegevenstype , zou het 1 byte voor elke kolom verbruiken. U moet het gegevenstype Bit gebruiken, terwijl u een Booleaanse waarde nodig heeft.

U kunt het gegevenstype Bit ook gebruiken in opgeslagen procedures of functies die Booleaanse waarden retourneren. We hebben bijvoorbeeld de fn_customer() functie die het klant-ID controleert, en als het bestaat, retourneert het waarde één anders retourneert het 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

Deze functie vereist klant-ID als invoerparameter. Als we het uitvoeren met klant-ID 10, krijgt u de volgende melding:

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

Als de klant-ID echter niet bestaat in de [SalesLT].[Customer] tabel, retourneert de functie waarde 0. De IF-blokvoorwaarde is niet waar. Daarom krijgt u het bericht gespecificeerd in de ELSE-clausule:

Conclusie

Het MSSQL Booleaanse gegevenstype-Bit gegevenstype is handig voor kolommen die waarden 0,1 of NULL accepteren. SQL Server optimaliseert de opslag van het gegevenstype Bit; daarom maakt het de code compact en efficiënt. Op dezelfde manier kunt u het gebruiken om Booleaanse waarden van een opgeslagen procedure of functie te retourneren.

Lees ook

Effectief omgaan met de NULL-waarden met de SQL COALESCE-functie voor beginners


  1. Fout 404 niet gevonden met EM 12c

  2. Afstand tussen twee punten berekenen (breedtegraad, lengtegraad)

  3. 3 manieren om de Modulo terug te sturen in MariaDB

  4. Kan een MySQL-trigger een CHECK-beperking simuleren?