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