Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Typ danych SQL Server BIT — ostateczny przewodnik

Wprowadzenie do typu danych bitowych

Typ danych reprezentuje atrybut, który przechowuje liczbę całkowitą, znak, czas danych, dane binarne. Załóżmy, że masz aplikację internetową do rejestrowania opinii użytkowników na różne pytania. Zawiera wiele pytań dychotomicznych i kilka pytań opartych na polach tekstowych, takich jak uwagi. Na zapleczu te odpowiedzi są przechowywane w tabeli SQL.

Aby zaprojektować tabelę, definiujemy kolumny i typy pól bazy danych. SQL Server obsługuje różne typy danych, takie jak integer, char, varchar(), float, DateTime, numeric itp. To samo można zastosować do typów danych T-SQL. Aby dowiedzieć się więcej o typach danych, zapoznaj się z oficjalną dokumentacją. Przypadki użycia zależą od wartości, które chcemy w nich przechowywać.

Załóżmy, że w utworzonej przez nas tabeli mamy określone kolumny. Te kolumny akceptują wartości logiczne 1,0 lub TRUE\False. SQL. Dlatego w SQL Server określony typ danych logicznych — Bit jest dostępny.

Bit serwera SQL to typ danych całkowitych, który akceptuje wartości 0,1 i NULL. Jest dostępny we wszystkich wersjach SQL Server, w tym Azure SQL Server, Azure Managed Instances i SQL na Azure VM.

Przechowywanie danych bitowych

Pod względem przechowywania typ danych Bit jest optymalizowany przez SQL Server. Jeśli masz osiem lub mniej kolumn Bit w tabeli, SQL Server przechowuje je jako 1 bajt. Podobnie w przypadku kolumn od 9 do 16 bitów zajmuje 2 bajty. Dodatkowo SQL Server konwertuje wartości String TRUE i FALSE na odpowiadające im wartości 1 i 0.

Składnia

Składnia typu danych BIT w SQL Server jest prosta:

 Bit

Praktyczne użycie typu danych bitowych

Poniższy skrypt T-SQL tworzy tabelę produktów i wstawia do niej dwie wartości danych produktów:

  • Jeśli produkt jest dostępny, bit kolumny [Dostępny] jest ustawiony na 1.
  • Jeśli produkt nie jest dostępny, bit kolumny [Dostępny] jest ustawiony na 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

Skróćmy tabelę [Products] i wstawmy jej wartości za pomocą ciągów TRUE i False.

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

Jak pokazano poniżej, SQL Server konwertuje ciąg TRUE na 1 i False na 0.

Jeśli jednak spróbujesz wstawić jakiekolwiek inne wartości, takie jak Tak lub Nie, do typu danych Bit, pojawi się komunikat o błędzie „Konwersja nie powiodła się”.

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

Po wstawieniu dowolnej wartości niezerowej do kolumny typu danych Bit, SQL Server konwertuje tę wartość na jeden. Na przykład w poniższym skrypcie wstawiamy wartość 100 do kolumny [dostępne]. W tym czasie nie pojawiają się żadne komunikaty o błędach.

Jeśli wybierzesz rekordy, potwierdzisz, że wstawiona wartość to 1.

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

Podobnie SQL Server konwertuje wartość ujemną na wartość 1 w kolumnie Bit. Jak pokazano poniżej, wstawiamy wartość -100 do kolumny [dostępne]. Otrzymujemy wartość jeden podczas jej pobierania:

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

Wcześniej używaliśmy typu danych Bit do sprawdzania dostępności produktu. Zwykle musimy wyświetlać tekst na interfejsie użytkownika zamiast bitów 1 i 0. Dlatego możemy użyć instrukcji CASE w SQL Server.

W poniższym kodzie T-SQL instrukcja CASE zwraca:

  • Wartość 1:Produkt jest dostępny
  • Wartość 0:Brak w magazynie
SELECT [ProductName], CASE [Available]
         WHEN 1 then  'Product is available.'
        WHEN 0 then 'Out of Stock'
        ELSE 'NA'
    END AS [Availability]
from products

Jak widzieliśmy wcześniej, SQL Server optymalizuje przechowywanie dla typu danych Bit. Poniższy [TestTable] ma osiem kolumn z typem danych Bit; dlatego używa 1 bajta do przechowywania.

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

Alternatywnie, jeśli używasz tinyint lub typ danych Char(1) , zużyje 1 bajt na każdą kolumnę. Powinieneś użyć typu danych Bit, podczas gdy potrzebujesz wartości logicznej.

Typu danych Bit można również użyć w procedurach składowanych lub funkcjach, które zwracają wartości logiczne. Na przykład mamy fn_customer() funkcja sprawdzająca identyfikator klienta, a jeśli istnieje, zwraca wartość jeden, w przeciwnym razie zwraca 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

Ta funkcja wymaga identyfikatora klienta jako parametru wejściowego. Jeśli wykonamy go z identyfikatorem klienta 10, otrzymasz następujący komunikat:

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

Jeśli jednak identyfikator klienta nie istnieje w [SalesLT].[Klient] tabeli, funkcja zwraca wartość 0. Warunek bloku JEŻELI nie jest spełniony. W związku z tym otrzymujesz komunikat określony w klauzuli ELSE:

Wniosek

Typ danych MSSQL Boolean-Bit jest przydatny dla kolumn akceptujących wartości 0,1 lub NULL. SQL Server optymalizuje przechowywanie danych typu Bit; dlatego sprawia, że ​​kod jest kompaktowy i wydajny. Podobnie, możesz go użyć do zwrócenia wartości logicznych z procedury składowanej lub funkcji.

Przeczytaj również

Skuteczna obsługa wartości NULL za pomocą funkcji SQL COALESCE dla początkujących


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zaktualizować z SELECT w SQL Server?

  2. Określ rozmiar wiersza dla tabeli

  3. Konwertuj „smalldatetime” na „date” w SQL Server (przykłady T-SQL)

  4. SQL Server 2016:Utwórz relację

  5. Nazwy plików SQL Server a wersje