¿Cómo se crea un campo booleano sí / no en el servidor SQL?


328

¿Cuál es la mejor práctica para crear un campo yes/noie Booleancuando se convierte de access databaseo en general?

Respuestas:


441

El equivalente es un BITcampo.

En SQLusa 0y 1para establecer un campo de bits (como un campo sí / no en Access). En Management Studio se muestra como un valor falso / verdadero (al menos en versiones recientes).

Al acceder a la base de datos a través de ASP.NET, expondrá el campo como un valor booleano.


3
Y si vincula la tabla en una base de datos de Access, verdadero tendrá el valor -1 y falso tendrá el valor 0. Al menos en Access 2003. (Esta es la versión que tenía a mano que estaba conectada a la base de datos MSSQL de un cliente).
Henrik Erlandsson

2
Tenga en cuenta que no es exactamente equivalente. Si una función escalar devuelve un bit, aún debe probar si es 0 o 1. Por ejemplo, dbo.IsReturnsBit (value) = 1
Darren Griffith el

@ D-Money: Sí, pero solo necesita hacer la comparación si desea usar el valor en una condición. Si usa el valor en el resultado, entonces no debe hacer una comparación.
Guffa

Re Mgt Studio, si está copiando + pegando datos, también debe tenerlo como Verdadero / Falso, no como 1 o 0.
gorlaz

110

El BITtipo de datos generalmente se usa para almacenar booleanvalores ( 0para false, 1para true).


1
se BITespecifica en el estándar SQL? Me está costando encontrarlo. Lo más cercano que pude ver es "tipo booleano".
pregunta el

1
¿Le preocupa que la semántica de bits y booleanos sea diferente?
Darth Egregious


20

Puedes usar el BITcampo.

Para agregar una columna BIT a una tabla existente, el comando SQL se vería así:

ALTER TABLE table_name ADD yes_no BIT

Si desea crear una nueva tabla, se podría hacer: CREATE TABLE table_name (yes_no BIT).


19

Puedes usar el tipo de datos bit

Los valores insertados que sean mayores que 0 se almacenarán como '1'

Los valores insertados que sean inferiores a 0 se almacenarán como '1'

Los valores insertados como '0' se almacenarán como '0'

Esto es válido para MS SQL Server 2012 Express


1
¿Está seguro de la afirmación sobre valores inferiores a 0?
BiLaL

3
@BiLaL Este es un comportamiento común en la mayoría de los idiomas. 0es falso, cualquier no 0número es verdadero. También era común que -1 sea el valor predeterminado para verdadero porque en binario con signo tiene cada bit establecido en 1. Hoy en día es muy común ver 1 como el valor predeterminado para verdadero (solo el conjunto de bits menos significativo).
CJ Dennis

16

Ya hay respuestas que dicen el uso de Bit. Agregaré más a estas respuestas.

Debe usar bit para representar valores booleanos.

Observaciones del artículo de MSDN.

El bit puede tomar un valor de 1, 0 o NULL.

El motor de base de datos de SQL Server optimiza el almacenamiento de columnas de bits. Si hay 8 o menos columnas de bits en una tabla, las columnas se almacenan como 1 byte. Si hay de 9 a 16 columnas de bit, las columnas se almacenan como 2 bytes, y así sucesivamente.

Los valores de cadena TRUE y FALSE se pueden convertir en valores de bit: TRUE se convierte en 1 y FALSE se convierte en 0.

La conversión a bit promueve cualquier valor distinto de cero a 1.

Referencia

Nota: es una buena práctica mantener los valores como 1 y 0 solo con el tipo de datos NOT NULL

Como Bit tienen valores 1, 0 y NULL. Ver tabla de verdad para esto. Entonces, planifique los valores en consecuencia. Puede agregar confusión al permitir un valor NULL para el tipo de datos de bit.

ingrese la descripción de la imagen aquí

Referencia


15

Ejemplo de uso al crear una tabla:

[ColumnName]     BIT   NULL   DEFAULT 0

12

Puedes usar el BITcampo

Para crear una nueva tabla:

CREATE TABLE Tb_Table1
(
ID              INT,
BitColumn       BIT DEFAULT 1
)

Agregar columna en la tabla existente:

ALTER TABLE Tb_Table1 ADD BitColumn  BIT DEFAULT 1

Para insertar registro:

INSERT Tb_Table1 VALUES(11,0)

9

bitserá el más simple y también ocupará el menor espacio. No muy detallado en comparación con "S / N", pero estoy bien con eso.


44
Creo que es mejor: no hay que preocuparse por Y == y y N = n, puro verdadero o falso. La intención es totalmente obvia, y no hay casos "especiales" que inviten los campos de caracteres únicos :)
Rob Grant

5

bitEs la opción más adecuada. De lo contrario, una vez lo usé intpara ese propósito. 1por truey 0para false.


2
Normalmente se usa 0 para Falso y no cero para Verdadero.
Edu

2
Hay muchos sabores o verdad podría decir un buen político: D
Buda Florin

1

En SQL Server Management Studio de cualquier versión, use BITcomo tipo de datos

que le proporcionará con Trueo Falseopciones de valor. en caso de que quiera usar Solo 1o 0luego puede usar este método:

CREATE TABLE SampleBit(
    bar int NOT NULL CONSTRAINT CK_foo_bar CHECK (bar IN (-1, 0, 1))
)

Pero te aconsejaré estrictamente BITcomo la MEJOR opción. Espero que sea de gran ayuda para alguien.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.