Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server BIT-Datentyp – Ultimativer Leitfaden

Einführung in den Bit-Datentyp

Der Datentyp stellt ein Attribut dar, das Integer-, Zeichen-, Datenzeit- und Binärdaten speichert. Angenommen, Sie haben eine Webanwendung, um das Feedback der Benutzer zu verschiedenen Fragen aufzuzeichnen. Es enthält mehrere dichotome Fragen und einige Textfeld-basierte Fragen, wie z. B. Bemerkungen. Auf dem Backend werden diese Antworten in einer SQL-Tabelle gespeichert.

Um die Tabelle zu entwerfen, definieren wir Spalten und Datenbankfeldtypen. SQL Server unterstützt verschiedene Datentypen wie Integer, Char, Varchar(), Float, DateTime, Numeric usw. Das Gleiche gilt für T-SQL-Datentypen. Weitere Informationen zu den Datentypen finden Sie in der offiziellen Dokumentation. Die Anwendungsfälle hängen von den Werten ab, die wir darin speichern möchten.

Angenommen, wir haben bestimmte Spalten in dieser Tabelle, die wir erstellt haben. Diese Spalten akzeptieren boolesche Werte 1,0 oder TRUE\False. SQL. Daher in SQL Server ein bestimmter boolescher Datentyp – Bit bereitgestellt wird.

Das SQL Server Bit ist ein ganzzahliger Datentyp, der 0,1 und NULL-Werte akzeptiert. Es ist in allen SQL Server-Versionen verfügbar, einschließlich Azure SQL Server, Azure Managed Instances und SQL on Azure VM.

Speicherung des Bit-Datentyps

Hinsichtlich der Speicherung wird der Bit-Datentyp vom SQL Server optimiert. Wenn Sie acht oder weniger Bit-Spalten in der Tabelle haben, speichert SQL Server sie als 1 Byte. In ähnlicher Weise verbraucht es für 9- bis 16-Bit-Spalten 2 Bytes. Außerdem konvertiert SQL Server die String-Werte TRUE und FALSE in die entsprechenden Werte 1 und 0.

Syntax

Die Syntax des BIT-Datentyps in SQL Server ist einfach:

 Bit

Praktische Verwendung des Bit-Datentyps

Das folgende T-SQL-Skript erstellt eine Produkttabelle und fügt darin zwei Produktdatenwerte ein:

  • Wenn das Produkt verfügbar ist, wird das Bit der Spalte [Verfügbar] auf 1 gesetzt.
  • Wenn das Produkt nicht verfügbar ist, wird das Spaltenbit [Available] auf 0 gesetzt.
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

Lassen Sie uns die Tabelle [Products] abschneiden und ihre Werte mit den Strings TRUE und False einfügen.

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

Wie unten gezeigt, konvertiert SQL Server die Zeichenfolge TRUE in 1 und False in 0.

Wenn Sie jedoch versuchen, andere Werte wie Ja oder Nein in den Bit-Datentyp einzufügen, erhalten Sie die Fehlermeldung „Konvertierung fehlgeschlagen“.

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

Wenn Sie einen Wert ungleich Null in die Spalte Bit-Datentyp einfügen, konvertiert SQL Server diesen Wert in Eins. Im folgenden Skript fügen wir beispielsweise den Wert 100 in die Spalte [verfügbar] ein. Dabei treten keine Fehlermeldungen auf.

Wenn Sie Datensätze auswählen, bestätigen Sie, dass der eingefügte Wert 1 ist.

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

Auf ähnliche Weise konvertiert SQL Server den negativen Wert in den Wert 1 in der Bit-Spalte. Wie unten gezeigt, fügen wir den Wert -100 in die Spalte [verfügbar] ein. Beim Abrufen erhalten wir den Wert eins:

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

Bisher haben wir den Datentyp Bit zur Überprüfung der Produktverfügbarkeit verwendet. Normalerweise müssen wir anstelle der Bits 1 und 0 Text am Frontend anzeigen. Daher können wir die CASE-Anweisung in SQL Server verwenden.

Im folgenden T-SQL-Code gibt die CASE-Anweisung Folgendes zurück:

  • Wert 1:Produkt ist verfügbar
  • Wert 0:Nicht auf Lager
SELECT [ProductName], CASE [Available]
         WHEN 1 then  'Product is available.'
        WHEN 0 then 'Out of Stock'
        ELSE 'NA'
    END AS [Availability]
from products

Wie wir bereits gesehen haben, optimiert SQL Server den Speicher für den Bit-Datentyp. Die folgende [TestTable] hat acht Spalten mit dem Datentyp Bit; daher verwendet es 1 Byte für die Speicherung.

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

Alternativ, wenn Sie tinyint verwenden oder Datentyp Char(1) , würde es 1 Byte für jede Spalte verbrauchen. Sie sollten den Datentyp Bit verwenden, während Sie einen booleschen Wert benötigen.

Sie können den Bit-Datentyp auch in gespeicherten Prozeduren oder Funktionen verwenden, die boolesche Werte zurückgeben. Zum Beispiel haben wir den fn_customer() Funktion, die die Kunden-ID überprüft, und falls vorhanden, gibt sie den Wert eins zurück, andernfalls gibt sie 0 zurück.

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

Diese Funktion erfordert die Kunden-ID als Eingabeparameter. Wenn wir es mit der Kunden-ID 10 ausführen, erhalten Sie die folgende Meldung:

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

Wenn die Kunden-ID jedoch nicht in [SalesLT].[Customer] vorhanden ist Tabelle, gibt die Funktion den Wert 0 zurück. Die IF-Block-Bedingung ist nicht wahr. Daher erhalten Sie die in der ELSE-Klausel angegebene Nachricht:

Schlussfolgerung

Der MSSQL-Datentyp Boolean-Bit-Datentyp ist nützlich für Spalten, die die Werte 0,1 oder NULL akzeptieren. SQL Server optimiert die Speicherung des Bit-Datentyps; Daher wird der Code kompakt und effizient. Ebenso können Sie es verwenden, um boolesche Werte von einer gespeicherten Prozedur oder Funktion zurückzugeben.

Lesen Sie auch

Effektiver Umgang mit NULL-Werten mit der SQL COALESCE-Funktion für Anfänger