Въведение в типа данни на бит
Типът данни представлява атрибут, който съхранява цяло число, символ, време за данни, двоични данни. Да предположим, че имате уеб приложение за записване на обратната връзка на потребителите за различни въпроси. Той съдържа множество дихотомични въпроса и няколко въпроса, базирани на текстово поле, като забележки. В задната част тези отговори се съхраняват в SQL таблица.
За да проектираме таблицата, ние дефинираме колони и типове полета в базата данни. SQL Server поддържа различни типове данни като цяло число, char, varchar(), float, DateTime, числови и т.н. Същото може да се приложи към типове данни на T-SQL. За да научите повече за типовете данни, вижте официалната документация. Случаите на употреба зависят от стойностите, които искаме да съхраняваме в тях.
Да предположим, че имаме конкретни колони в тази таблица, която сме създали. Тези колони приемат булеви стойности 1,0 или TRUE\False. SQL. Следователно, в SQL Server, определен булев тип данни – Bit е предоставено.
Битът на SQL Server е целочислен тип данни, който приема стойности 0,1 и NULL. Предлага се във всички версии на SQL Server, включително Azure SQL Server, Azure Managed Instances и SQL на Azure VM.
Съхранение на битови типове данни
По отношение на съхранение, типът данни Bit е оптимизиран от SQL Server. Ако имате осем или по-малко битови колони в таблицата, SQL Server ги съхранява като 1 байт. По същия начин, за 9 до 16-битови колони, той консумира 2 байта. Освен това SQL Server преобразува стойностите на низ TRUE и FALSE в съответните им стойности 1 и 0.
Синтаксис
Синтаксисът на типа данни BIT в SQL Server е ясен:
Bit
Практическо използване на битов тип данни
Следният T-SQL скрипт създава продуктова таблица и вмъква две стойности на данни за продукти в нея:
- Ако продуктът е наличен, битът на колоната [Available] е зададен на 1.
- Ако продуктът не е наличен, битът на колоната [Available] е зададен на 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
Нека съкратим таблицата [Products] и да вмъкнем нейните стойности, използвайки низовете TRUE и False.
TRUNCATE TABLE Products
INSERT INTO Products (productname,available) values('A','TRUE')
INSERT INTO Products (productname,available) values('B','False')
GO
SELECT * FROM Products
Както е показано по-долу, SQL Server преобразува низа TRUE в 1 и False в 0.
Въпреки това, ако се опитате да вмъкнете други стойности, като например Да или Не, в битовия тип данни, ще получите съобщението за грешка „Преобразуването не бе успешно“.
INSERT INTO Products (productname,available) values('A','Yes')
Когато вмъкнете каквато и да е стойност, различна от нула в колоната тип данни за бит, SQL Server преобразува тази стойност в единица. Например, в следния скрипт вмъкваме стойност 100 в колоната [available]. Докато това не се появяват съобщения за грешка.
Ако изберете записи, потвърждавате, че вмъкнатата стойност е 1.
INSERT INTO Products (productname,available) values('A',100)
SELECT * FROM Products;
По същия начин SQL Server преобразува отрицателната стойност в стойност 1 в колоната Bit. Както е показано по-долу, вмъкваме стойност -100 в колоната [налично]. Получаваме стойност едно, докато го извличаме:
INSERT INTO Products (productname,available) values('A',-100)
SELECT * FROM Products;
Преди това използвахме типа данни Bit за проверка на наличността на продукта. Обикновено трябва да показваме текст в предния край вместо битове 1 и 0. Следователно можем да използваме израза CASE в SQL Server.
В следния T-SQL код операторът CASE връща:
- Стойност 1:Продуктът е наличен
- Стойност 0:Изчерпана наличност
SELECT [ProductName], CASE [Available]
WHEN 1 then 'Product is available.'
WHEN 0 then 'Out of Stock'
ELSE 'NA'
END AS [Availability]
from products
Както видяхме по-рано, SQL Server оптимизира съхранението за типа данни Bit. Следната [TestTable] има осем колони с тип данни Bit; следователно използва 1 байт за съхранение.
CREATE TABLE TestTable (
[Column1] Bit,
[Column2] Bit,
[Column3] Bit,
[Column4] Bit,
[Column5] Bit,
[Column6] Bit,
[Column7] Bit,
[Column8] Bit,
);
Като алтернатива, ако използвате tinyint или Char(1) тип данни , ще консумира 1 байт за всяка колона. Трябва да използвате битовия тип данни, докато имате нужда от булева стойност.
Можете също да използвате типа данни Bit в съхранени процедури или функции, които връщат булеви стойности. Например имаме fn_customer() функция, която проверява идентификатора на клиента и ако съществува, връща стойност 1, друга връща 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
Тази функция изисква идентификатор на клиента като входен параметър. Ако го изпълним с клиентски идентификатор 10, получавате следното съобщение:
IF (dbo.fn_customer(10)=1)
PRINT 'Customer record is available'
ELSE
PRINT 'Customer record is not available'
Ако обаче клиентският идентификатор не съществува в [SalesLT].[Клиент] таблица, функцията връща стойност 0. Условието IF блок не е вярно. Следователно получавате съобщението, посочено в клаузата ELSE:
Заключение
Типът данни MSSQL Boolean-Bit е полезен за колони, приемащи стойности 0,1 или NULL. SQL Server оптимизира съхранението на битови типове данни; следователно, това прави кода компактен и ефективен. По същия начин можете да го използвате за връщане на булеви стойности от съхранена процедура или функция.
Прочетете също
Ефективна обработка на стойностите NULL с функцията SQL COALESCE за начинаещи