Como você cria um campo booleano sim / não no SQL server?


328

Qual é a melhor prática para criar um campo yes/noie Booleanao converter de um access databaseou em geral?

Respostas:


441

O equivalente é um BITcampo.

Em SQLvocê usa 0e 1para definir um campo de bit (assim como um campo sim / não no Access). No Management Studio, ele é exibido como um valor falso / verdadeiro (pelo menos nas versões recentes).

Ao acessar o banco de dados através do ASP.NET, ele expõe o campo como um valor booleano.


3
E se você vincular a tabela em um banco de dados do Access, true terá o valor -1 e false terá o valor 0. Pelo menos no Access 2003. (Esta é a versão que eu tinha à mão e estava conectada ao banco de dados MSSQL de um cliente).
Henrik Erlandsson

2
Observe que não é exatamente equivalente. Se uma função escalar retorna um pouco, você ainda precisa de teste se for 0 ou 1. Por exemplo, dbo.IsReturnsBit (valor) = 1
Darren Griffith

@ D-Money: Sim, mas você só precisa fazer a comparação se quiser usar o valor em uma condição. Se você usar o valor no resultado, não deverá fazer uma comparação.
Guffa

Re Mgt Studio, se você é cópia + colar dados em que você precisa para tê-lo como verdadeiro / falso também, não como 1 ou 0.
gorlaz

110

O BITtipo de dados geralmente é usado para armazenar booleanvalores ( 0para false, 1para true).


1
está BITespecificado no padrão SQL? Estou tendo dificuldade para encontrá-lo. O mais próximo que eu pude ver é "tipo booleano".
ASGs

1
Você está preocupado que a semântica de bits e booleanos seja diferente?
Darth Egrégio


20

Você pode usar o BITcampo

Para adicionar uma coluna BIT a uma tabela existente, o comando SQL seria semelhante a:

ALTER TABLE table_name ADD yes_no BIT

Se você deseja criar uma nova tabela, você poderia fazer: CREATE TABLE table_name (yes_no BIT).


19

Você pode usar o tipo de dados bit

Valores inseridos maiores que 0 serão armazenados como '1'

Valores inseridos menores que 0 serão armazenados como '1'

Os valores inseridos como '0' serão armazenados como '0'

Isso vale para o MS SQL Server 2012 Express


1
Você tem certeza da declaração referente a valores menores que 0?
BiLaL

3
@BiLaL Esse é um comportamento comum na maioria dos idiomas. 0é falso, qualquer não- 0número é verdadeiro. Também era comum que -1 fosse o valor padrão para true, porque no binário assinado ele tem todos os bits definidos como 1. Atualmente, é muito comum ver 1 como o valor padrão para true (apenas o conjunto de bits menos significativo).
CJ Dennis

16

Já existem respostas dizendo o uso do Bit. Acrescentarei mais a essas respostas.

Você deve usar bit para representar valores booleanos.

Comentários do artigo do MSDN.

Bit pode assumir um valor de 1, 0 ou NULL.

O SQL Server Database Engine otimiza o armazenamento de colunas de bits. Se houver colunas de 8 ou menos bits em uma tabela, as colunas serão armazenadas como 1 byte. Se houver colunas de 9 a 16 bits, as colunas serão armazenadas como 2 bytes e assim por diante.

Os valores da sequência TRUE e FALSE podem ser convertidos em valores de bit: TRUE é convertido em 1 e FALSE é convertido em 0.

A conversão em bit promove qualquer valor diferente de zero para 1.

Referência

Nota: É uma boa prática manter valores como 1 e 0 apenas com o tipo de dados NOT NULL

As Bit têm valores 1, 0 e NULL. Veja a tabela da verdade para isso. Portanto, planeje os valores adequadamente. Pode adicionar confusão ao permitir um valor NULL para o tipo de dados de bit.

insira a descrição da imagem aqui

Referência


15

Exemplo de uso ao criar uma tabela:

[ColumnName]     BIT   NULL   DEFAULT 0

12

Você pode usar o BITcampo

Para criar uma nova tabela:

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

Adicionando coluna na tabela existente:

ALTER TABLE Tb_Table1 ADD BitColumn  BIT DEFAULT 1

Para inserir registro:

INSERT Tb_Table1 VALUES(11,0)

9

bitserá o mais simples e também ocupa menos espaço. Não é muito detalhado em comparação com "S / N", mas estou bem com isso.


4
É melhor eu acho - não precisa se preocupar com Y == y e N = n, puro verdadeiro ou falso. A intenção é totalmente óbvia, e não há casos "especiais" que os campos de um caractere convidem :) #
446 Rob Grant

5

bité a opção mais adequada. Caso contrário, uma vez eu usei intpara esse fim. 1para truee 0para false.


2
Normalmente é usado 0 para Falso e diferente de zero para True.
Edu

2
há muitos sabores ou verdadeiros podem dizer um bom político: D
Buda Florin

1

No SQL Server Management Studio de qualquer versão, use BITcomo tipo de dados

que fornecerá Trueou Falseopções de valor. caso deseje usar Only 1ou 0então você pode usar este método:

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

Mas vou aconselhar estritamente BITcomo a melhor opção. Espero plenamente que seja ajudar alguém.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.