sql >> Base de Datos >  >> RDS >> Sqlserver

Tipo de datos BIT de SQL Server:guía definitiva

Introducción al tipo de datos de bits

El tipo de datos representa un atributo que almacena números enteros, caracteres, tiempo de datos, datos binarios. Suponga que tiene una aplicación web para registrar los comentarios de los usuarios sobre varias preguntas. Contiene múltiples preguntas dicotómicas y algunas preguntas basadas en cuadros de texto, como comentarios. En el backend, estas respuestas se almacenan en una tabla SQL.

Para diseñar la tabla, definimos columnas y tipos de campos de base de datos. SQL Server admite varios tipos de datos, como enteros, char, varchar(), float, DateTime, numérico, etc. Lo mismo se puede aplicar a los tipos de datos T-SQL. Para obtener más información sobre los tipos de datos, consulte la documentación oficial. Los casos de uso dependen de los valores que queramos almacenar en ellos.

Supongamos que tenemos columnas específicas en esa tabla que hemos creado. Esas columnas aceptan valores booleanos 1,0 o VERDADERO\Falso. SQL. Por lo tanto, en SQL Server, un tipo de datos booleano particular:Bit se proporciona.

El bit de SQL Server es un tipo de datos entero que acepta valores 0,1 y NULL. Está disponible en todas las versiones de SQL Server, incluidos Azure SQL Server, Azure Managed Instances y SQL en Azure VM.

Almacenamiento de tipos de datos de bits

En términos de almacenamiento, el tipo de datos Bit está optimizado por SQL Server. Si tiene ocho o menos columnas de bits en la tabla, SQL Server las almacena como 1 byte. De manera similar, para columnas de 9 a 16 bits, consume 2 bytes. Además, SQL Server convierte los valores de cadena VERDADERO y FALSO en sus valores correspondientes 1 y 0.

Sintaxis

La sintaxis del tipo de datos BIT en SQL Server es sencilla:

 Bit

Uso práctico del tipo de datos Bit

El siguiente script T-SQL crea una tabla de productos e inserta dos valores de datos de productos en ella:

  • Si el producto está disponible, el bit de la columna [Disponible] se establece en 1.
  • Si el producto no está disponible, el bit de la columna [Disponible] se establece en 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

Trunquemos la tabla [Productos] e insertemos sus valores usando las cadenas VERDADERO y Falso.

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

Como se muestra a continuación, SQL Server convierte la cadena VERDADERO en 1 y Falso en 0.

Sin embargo, si intenta insertar cualquier otro valor, como Sí o No, en el tipo de datos Bit, obtendrá el mensaje de error "Conversión fallida".

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

Cuando inserta cualquier valor distinto de cero en la columna de tipo de datos Bit, SQL Server convierte ese valor en uno. Por ejemplo, en el siguiente script, insertamos el valor 100 en la columna [disponible]. No aparecen mensajes de error mientras eso sucede.

Si selecciona registros, valida que el valor insertado sea 1.

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

De manera similar, SQL Server convierte el valor negativo al valor 1 en la columna Bit. Como se muestra a continuación, insertamos el valor -100 en la columna [disponible]. Recibimos el valor uno mientras lo recuperamos:

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

Anteriormente, usábamos el tipo de datos Bit para verificar la disponibilidad del producto. Por lo general, necesitamos mostrar texto en el front-end en lugar de los bits 1 y 0. Por lo tanto, podemos usar la instrucción CASE en SQL Server.

En el siguiente código T-SQL, la instrucción CASE devuelve:

  • Valor 1:el producto está disponible
  • Valor 0:Agotado
SELECT [ProductName], CASE [Available]
         WHEN 1 then  'Product is available.'
        WHEN 0 then 'Out of Stock'
        ELSE 'NA'
    END AS [Availability]
from products

Como pudimos ver anteriormente, SQL Server optimiza el almacenamiento para el tipo de datos Bit. La siguiente [TestTable] tiene ocho columnas con el tipo de datos Bit; por lo tanto, utiliza 1 byte para el almacenamiento.

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

Alternativamente, si usa tinyint o tipo de datos Char(1) , consumiría 1 byte para cada columna. Debe usar el tipo de datos Bit, mientras que necesita un valor booleano.

También puede usar el tipo de datos Bit en funciones o procedimientos almacenados que devuelven valores booleanos. Por ejemplo, tenemos el fn_customer() función que verifica la identificación del cliente, y si existe, devuelve el valor, de lo contrario, devuelve 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

Esta función requiere el ID del cliente como parámetro de entrada. Si lo ejecutamos con ID de cliente 10, te sale el siguiente mensaje:

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

Sin embargo, si el ID de cliente no existe en [SalesLT].[Customer] tabla, la función devuelve el valor 0. La condición del bloque IF no es verdadera. Por lo tanto, recibe el mensaje especificado en la cláusula ELSE:

Conclusión

El tipo de datos MSSQL Boolean-Bit es útil para columnas que aceptan valores 0,1 o NULL. SQL Server optimiza el almacenamiento del tipo de datos Bit; por lo tanto, hace que el código sea compacto y eficiente. De manera similar, puede usarlo para devolver valores booleanos desde un procedimiento o función almacenados.

Leer también

Manejo de valores NULL de manera efectiva con la función SQL COALESCE para principiantes