Wie erstellt man ein boolesches Ja / Nein-Feld in SQL Server?

327

Was ist die beste Vorgehensweise zum Erstellen eines yes/nodh BooleanFelds beim Konvertieren von einem access databaseoder allgemein?

Leora
quelle

Antworten:

440

Das Äquivalent ist ein BITFeld.

In verwenden SQLSie 0und 1, um ein Bitfeld festzulegen (genau wie ein Ja / Nein-Feld in Access). In Management Studio wird es als falsch / wahr-Wert angezeigt (zumindest in neueren Versionen).

Beim Zugriff auf die Datenbank über ASP.NET wird das Feld als boolescher Wert verfügbar gemacht.

Guffa
quelle
3
Und wenn Sie die Tabelle in einer Access-Datenbank verknüpfen, hat true den Wert -1 und false den Wert 0. Zumindest in Access 2003. (Dies ist die Version, die ich zur Hand hatte und die mit der MSSQL-Datenbank eines Kunden verbunden war).
Henrik Erlandsson
2
Bitte beachten Sie, dass es nicht genau gleichwertig ist. Wenn eine Skalarfunktion ein Bit zurückgibt, müssen Sie noch testen, ob sie 0 oder 1 ist. Beispiel: dbo.IsReturnsBit (Wert) = 1
Darren Griffith
@ D-Money: Ja, aber Sie müssen den Vergleich nur durchführen, wenn Sie den Wert in einer Bedingung verwenden möchten. Wenn Sie den Wert im Ergebnis verwenden, sollten Sie keinen Vergleich durchführen.
Guffa
Re Mgt Studio, wenn Sie Daten kopieren + einfügen, müssen Sie sie auch als Wahr / Falsch haben, nicht als 1 oder 0.
Gorlaz
110

Der BITDatentyp wird im Allgemeinen zum Speichern von booleanWerten ( 0für false, 1für true) verwendet.

Alex Martelli
quelle
1
ist BITim SQL-Standard angegeben? Es fällt mir schwer, es zu finden. Der nächste, den ich sehen konnte, ist "Boolescher Typ".
Asgs
1
Befürchten Sie überhaupt, dass die Semantik von Bits und Booleschen Werten unterschiedlich ist?
Darth Egregious
25

Sie können den bitSpaltentyp verwenden.

Mark Byers
quelle
20

Sie können das BITFeld verwenden.

Zum Hinzufügen einer BIT-Spalte zu einer vorhandenen Tabelle sieht der SQL-Befehl folgendermaßen aus:

ALTER TABLE table_name ADD yes_no BIT

Wenn Sie eine neue Tabelle erstellen möchten, haben Sie folgende Möglichkeiten : CREATE TABLE table_name (yes_no BIT).

John Mark
quelle
19

Sie können den Datentyp verwenden bit

Eingefügte Werte, die größer als 0 sind, werden als '1' gespeichert.

Eingefügte Werte, die kleiner als 0 sind, werden als '1' gespeichert.

Als '0' eingefügte Werte werden als '0' gespeichert.

Dies gilt für MS SQL Server 2012 Express

P_Fitz
quelle
1
Sind Sie sich über die Aussage bezüglich Werten unter 0 sicher?
BiLaL
3
@BiLaL Dies ist in den meisten Sprachen üblich. 0ist falsch, jede Nichtzahl 0ist wahr. Es war auch üblich, dass -1 der Standardwert für true ist, da in der vorzeichenbehafteten Binärdatei jedes Bit auf 1 gesetzt ist. Heutzutage ist es sehr üblich, 1 als Standardwert für true zu sehen (nur das niedrigstwertige gesetzte Bit).
CJ Dennis
16

Es gibt bereits Antworten, die die Verwendung von Bit besagen. Ich werde diesen Antworten mehr hinzufügen.

Sie sollten Bit zur Darstellung von Booleschen Werten verwenden.

Anmerkungen aus dem MSDN-Artikel.

Das Bit kann den Wert 1, 0 oder NULL annehmen.

Das SQL Server-Datenbankmodul optimiert die Speicherung von Bitspalten. Wenn eine Tabelle 8 oder weniger Bitspalten enthält, werden die Spalten als 1 Byte gespeichert. Wenn 9 bis 16-Bit-Spalten vorhanden sind, werden die Spalten als 2 Byte usw. gespeichert.

Die Zeichenfolgenwerte TRUE und FALSE können in Bitwerte konvertiert werden: TRUE wird in 1 und FALSE in 0 konvertiert.

Durch die Konvertierung in Bit wird jeder Wert ungleich Null auf 1 erhöht.

Referenz

Hinweis: Es wird empfohlen, die Werte 1 und 0 nur für den Datentyp beizubehalten NOT NULL

Als Bit haben die Werte 1, 0 und NULL. Siehe dazu die Wahrheitstabelle. Planen Sie also die Werte entsprechend. Dies kann zu Verwirrung führen, indem der NULL-Wert für den Bitdatentyp zugelassen wird.

Geben Sie hier die Bildbeschreibung ein

Referenz

Somnath Muluk
quelle
15

Beispiel für die Verwendung beim Erstellen einer Tabelle:

[ColumnName]     BIT   NULL   DEFAULT 0
Torina
quelle
12

Sie können das BITFeld verwenden

So erstellen Sie eine neue Tabelle:

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

Hinzufügen einer Spalte zur vorhandenen Tabelle:

ALTER TABLE Tb_Table1 ADD BitColumn  BIT DEFAULT 1

So fügen Sie einen Datensatz ein:

INSERT Tb_Table1 VALUES(11,0)
Sachith
quelle
9

bitwird am einfachsten sein und nimmt auch den geringsten Platz ein. Nicht sehr ausführlich im Vergleich zu "J / N", aber ich bin damit einverstanden.

OK W
quelle
4
Ich denke, es ist besser - Sie müssen sich keine Sorgen um Y == y und N = n machen, rein wahr oder falsch. Die Absicht ist völlig offensichtlich und es gibt keine "Sonderfälle", die einzelne Zeichenfelder einladen :)
Rob Grant
5

bitist die am besten geeignete Option. Ansonsten habe ich einmal intfür diesen Zweck verwendet. 1für true& 0für false.

Baqer Naqvi
quelle
2
Normalerweise wird 0 für False und ungleich Null für True verwendet.
Edu
2
Es gibt viele Geschmacksrichtungen oder wahr könnte ein guter Politiker sagen: D
Buda Florin
1

In SQL Server Management Studio einer beliebigen Version BITals Datentyp verwenden

Hiermit erhalten Sie Optionen Trueoder FalseWerte. Falls Sie Nur 1oder 0dann verwenden möchten, können Sie diese Methode verwenden:

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

Aber ich werde streng BITals die beste Option raten . Hoffe voll und ganz, es hilft jemandem.

PatsonLeaner
quelle