Comment créez-vous un champ booléen oui / non dans le serveur SQL?


328

Quelle est la meilleure pratique pour créer un champ yes/noie Booleanlors de la conversion d'un access databaseou en général?

Réponses:


441

L'équivalent est un BITchamp.

Dans SQLvous utilisez 0et 1pour définir un champ de bits (tout comme un champ oui / non dans Access). Dans Management Studio, il s'affiche comme une valeur fausse / vraie (au moins dans les versions récentes).

Lors de l'accès à la base de données via ASP.NET, il exposera le champ comme une valeur booléenne.


3
Et si vous liez la table dans une base de données Access, true aura la valeur -1 et false aura la valeur 0. Au moins dans Access 2003. (Il s'agit de la version que j'avais à portée de main qui était connectée à la base de données MSSQL d'un client).
Henrik Erlandsson

2
Veuillez noter que ce n'est pas exactement équivalent. Si une fonction scalaire retourne un peu, vous devez toujours tester si elle est 0 ou 1. Par exemple, dbo.IsReturnsBit (value) = 1
Darren Griffith

@ D-Money: Oui, mais vous ne devez faire la comparaison que si vous souhaitez utiliser la valeur dans une condition. Si vous utilisez la valeur dans le résultat, vous ne devez pas faire de comparaison.
Guffa

Re Mgt Studio, si vous copiez + collez des données, vous devez également les avoir comme Vrai / Faux, pas comme 1 ou 0.
Gorlaz

110

Le BITtype de données est généralement utilisé pour stocker des booleanvaleurs ( 0pour false, 1pour true).


1
est BITspécifié dans la norme SQL? J'ai du mal à le trouver. Le plus proche que j'ai pu voir est "Type booléen".
asgs

1
Êtes-vous inquiet du fait que la sémantique des bits et des booléens soit différente?
Dark Egregious


20

Vous pouvez utiliser le BITchamp.

Pour ajouter une colonne BIT à une table existante, la commande SQL ressemblerait à:

ALTER TABLE table_name ADD yes_no BIT

Si vous voulez créer une nouvelle table, vous pouvez faire: CREATE TABLE table_name (yes_no BIT).


19

Vous pouvez utiliser le type de données bit

Les valeurs insérées qui sont supérieures à 0 seront stockées comme '1'

Les valeurs insérées qui sont inférieures à 0 seront stockées comme '1'

Les valeurs insérées comme «0» seront stockées comme «0»

Cela est vrai pour MS SQL Server 2012 Express


1
Êtes-vous sûr de l'énoncé concernant les valeurs inférieures à 0?
BiLaL

3
@BiLaL Il s'agit d'un comportement courant dans la plupart des langues. 0est faux, tout non- 0nombre est vrai. Il était également courant que -1 soit la valeur par défaut pour true car dans le binaire signé, chaque bit est défini sur 1. De nos jours, il est très courant de voir 1 comme valeur par défaut pour true (uniquement le bit le moins significatif).
CJ Dennis

16

Il y a déjà des réponses disant l'utilisation de Bit. J'ajouterai plus à ces réponses.

Vous devez utiliser bit pour représenter les valeurs booléennes.

Remarques de l'article MSDN.

Le bit peut prendre une valeur de 1, 0 ou NULL.

Le moteur de base de données SQL Server optimise le stockage des colonnes de bits. S'il y a 8 colonnes de bits ou moins dans une table, les colonnes sont stockées sur 1 octet. S'il y a de 9 à 16 colonnes de bits, les colonnes sont stockées sur 2 octets, etc.

Les valeurs de chaîne TRUE et FALSE peuvent être converties en valeurs binaires: TRUE est converti en 1 et FALSE est converti en 0.

La conversion en bit fait passer toute valeur non nulle à 1.

Référence

Remarque: il est recommandé de conserver les valeurs 1 et 0 uniquement avec le type de données NOT NULL

As Bit a les valeurs 1, 0 et NULL. Voir la table de vérité pour cela. Planifiez donc les valeurs en conséquence. Cela peut ajouter de la confusion en autorisant la valeur NULL pour le type de données bit.

entrez la description de l'image ici

Référence


15

Exemple d'utilisation lors de la création d'une table:

[ColumnName]     BIT   NULL   DEFAULT 0

12

Vous pouvez utiliser le BITchamp

Pour créer une nouvelle table:

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

Ajout d'une colonne dans une table existante:

ALTER TABLE Tb_Table1 ADD BitColumn  BIT DEFAULT 1

Pour insérer un enregistrement:

INSERT Tb_Table1 VALUES(11,0)

9

bitsera le plus simple et prendra également le moins d'espace. Pas très verbeux par rapport à "O / N" mais ça me va.


4
C'est mieux je pense - pas besoin de s'inquiéter pour Y == y et N = n, pur vrai ou faux. L'intention est totalement évidente, et il n'y a pas de cas "spéciaux" que les champs à caractère unique invitent :)
Rob Grant

5

bitest l'option la plus appropriée. Sinon, je l'ai déjà utilisé intà cette fin. 1pour true& 0pour false.


2
Normalement, son utilisé 0 pour False et non nul pour True.
Edu

2
il y a beaucoup de saveurs ou vrai pourrait dire un bon politicien: D
Buda Florin

1

Dans SQL Server Management Studio de n'importe quelle version, utilisez BITcomme type de données

qui vous fournira des options Trueou FalseValue. dans le cas où vous souhaitez utiliser uniquement 1ou 0alors vous pouvez utiliser cette méthode:

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

Mais je conseillerai strictement BITcomme la meilleure option. J'espère pleinement que c'est aider quelqu'un.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.