Come si crea un campo booleano sì / no in SQL Server?


328

Qual è la migliore pratica per creare un campo yes/noie Booleandurante la conversione da access databaseo in generale?

Risposte:


441

L'equivalente è un BITcampo.

In SQLsi usa 0e 1per impostare un campo bit (proprio come un campo sì / no in Access). In Management Studio viene visualizzato come valore falso / vero (almeno nelle versioni recenti).

Quando si accede al database tramite ASP.NET esporrà il campo come valore booleano.


3
E se si collega la tabella in un database di Access, true avrà il valore -1 e false avrà il valore 0. Almeno in Access 2003. (Questa è la versione che avevo a portata di mano che era collegata al database MSSQL di un cliente).
Henrik Erlandsson,

2
Si noti che non è esattamente equivalente. Se una funzione scalare restituisce un po ', è comunque necessario verificare se è 0 o 1. Ad esempio, dbo.IsReturnsBit (valore) = 1
Darren Griffith,

@ D-Money: Sì, ma devi solo fare il confronto se vuoi usare il valore in una condizione. Se usi il valore nel risultato, non dovresti fare un confronto.
Guffa,

Per quanto riguarda Mgt Studio, se stai copiando + incollando i dati devi averlo come Vero / Falso anche, non come 1 o 0.
Gorlaz,

110

Il BITtipo di dati viene generalmente utilizzato per memorizzare booleanvalori ( 0per false, 1per true).


1
è BITspecificato nello standard SQL? Sto facendo fatica a trovarlo. Il più vicino che ho potuto vedere è "Tipo booleano".
as

1
Sei preoccupato che la semantica di bit e booleani sia diversa?
Darth Egregious,


20

Puoi usare il BITcampo.

Per l'aggiunta di una colonna BIT a una tabella esistente, il comando SQL sarebbe simile a:

ALTER TABLE table_name ADD yes_no BIT

Se si desidera creare una nuova tabella, si potrebbe fare: CREATE TABLE table_name (yes_no BIT).


19

È possibile utilizzare il tipo di dati bit

I valori inseriti che sono maggiori di 0 verranno memorizzati come '1'

I valori inseriti che sono inferiori a 0 verranno memorizzati come '1'

I valori inseriti come '0' verranno memorizzati come '0'

Questo vale per MS SQL Server 2012 Express


1
Sei sicuro dell'affermazione relativa a valori inferiori a 0?
BiLaL il

3
@BiLaL Questo è un comportamento comune nella maggior parte delle lingue. 0è falso, qualsiasi non- 0numero è vero. Era anche comune che -1 fosse il valore predefinito per true perché in binario con segno ha tutti i bit impostati su 1. Oggi è molto comune vedere 1 come valore predefinito per true (solo il set di bit meno significativo).
CJ Dennis,

16

Ci sono già risposte che dicono l'uso di Bit. Aggiungerò altro a queste risposte.

Utilizzare bit per rappresentare i valori booleani.

Osservazioni dall'articolo MSDN.

Il bit può assumere un valore di 1, 0 o NULL.

Il motore di database di SQL Server ottimizza l'archiviazione delle colonne di bit. Se in una tabella sono presenti 8 o meno colonne di bit, le colonne vengono memorizzate come 1 byte. Se ci sono colonne da 9 a 16 bit, le colonne vengono archiviate come 2 byte e così via.

I valori di stringa TRUE e FALSE possono essere convertiti in valori di bit: TRUE viene convertito in 1 e FALSE viene convertito in 0.

La conversione in bit promuove qualsiasi valore diverso da zero in 1.

Riferimento

Nota: è buona norma conservare i valori come 1 e 0 solo con il tipo di dati NOT NULL

Poiché Bit hanno i valori 1, 0 e NULL. Vedi la tabella della verità per questo. Quindi pianificare i valori di conseguenza. Potrebbe aggiungere confusione consentendo il valore NULL per il tipo di dati bit.

inserisci qui la descrizione dell'immagine

Riferimento


15

Esempio di utilizzo durante la creazione di una tabella:

[ColumnName]     BIT   NULL   DEFAULT 0

12

Puoi usare il BITcampo

Per creare una nuova tabella:

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

Aggiunta di una colonna nella tabella esistente:

ALTER TABLE Tb_Table1 ADD BitColumn  BIT DEFAULT 1

Per inserire un record:

INSERT Tb_Table1 VALUES(11,0)

9

bitsarà il più semplice e occuperà anche il minimo spazio. Non molto prolisso rispetto a "S / N" ma sto bene.


4
È meglio penso - non c'è bisogno di preoccuparsi di Y == y e N = n, vero vero o falso. L'intenzione è del tutto ovvia, e non ci sono casi "speciali" che i campi a carattere singolo invitano :)
Rob Grant

5

bitè l'opzione più adatta. Altrimenti una volta l'ho usato intper quello scopo. 1per true& 0per false.


2
Normalmente viene utilizzato 0 per False e diverso da zero per True.
Edu,

2
ci sono molti gusti o potrebbe dire un buon politico: D
Buda Florin,

1

In SQL Server Management Studio di qualsiasi versione, utilizzare BITcome tipo di dati

che ti fornirà Trueo Falseopzioni Value. nel caso in cui si desidera utilizzare solo 1o 0quindi è possibile utilizzare questo metodo:

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

Ma consiglierò rigorosamente BITcome L' opzione MIGLIORE . Spero pienamente che sia d'aiuto a qualcuno.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.