Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL Server BIT Datatype – Крайно ръководство

Въведение в типа данни на бит

Типът данни представлява атрибут, който съхранява цяло число, символ, време за данни, двоични данни. Да предположим, че имате уеб приложение за записване на обратната връзка на потребителите за различни въпроси. Той съдържа множество дихотомични въпроса и няколко въпроса, базирани на текстово поле, като забележки. В задната част тези отговори се съхраняват в 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 за начинаещи


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Вътрешни елементи на SQL Server:Проблемни оператори Pt. III – Сортове

  2. Свързване на Bastion сървър към PostgreSQL сървър чрез SSH тунел

  3. Как да разберем типа данни за география на SQL Server

  4. Намерете стойност навсякъде в база данни

  5. SQL Server DATEPART() срещу DATENAME() – Каква е разликата?