Jak utworzyć pole logiczne typu tak / nie na serwerze SQL?


Odpowiedzi:


441

Odpowiednikiem jest BITpole.

W SQLużyciu 0i 1ustawić pole bitowe (tak jak pole tak / nie w programie Access). W Management Studio wyświetla się jako wartość false / true (przynajmniej w najnowszych wersjach).

Podczas uzyskiwania dostępu do bazy danych za pośrednictwem ASP.NET ujawni to pole jako wartość logiczną.


3
A jeśli podłączysz tabelę do bazy danych Access, true będzie mieć wartość -1, a false będzie miało wartość 0. Przynajmniej w Access 2003. (To była wersja, którą miałem pod ręką, która była podłączona do bazy danych MSSQL klienta).
Henrik Erlandsson,

2
Należy pamiętać, że nie jest to dokładnie równoważne. Jeśli funkcja skalarna zwraca trochę, nadal musisz sprawdzić, czy jest to 0 lub 1. Na przykład dbo.IsReturnsBit (wartość) = 1
Darren Griffith

@ D-Money: Tak, ale musisz wykonać porównanie tylko, jeśli chcesz użyć wartości w warunku. Jeśli użyjesz wartości w wyniku, nie powinieneś robić porównania.
Guffa,

Re Mgt Studio, jeśli kopiujesz i wklejasz dane, musisz mieć je również jako True / False, a nie jako 1 lub 0.
gorlaz

110

Typ BITdanych jest zwykle używany do przechowywania booleanwartości ( 0for false, 1for true).


1
jest BITokreślony w standardzie SQL? Trudno mi to znaleźć. Najbliższe jakie widziałem to „typ boolowski”.
ass

1
Czy w ogóle obawiasz się, że semantyka bitów i boolanów jest inna?
Darth Egregious


20

Możesz użyć BITpola.

Aby dodać kolumnę BIT do istniejącej tabeli, polecenie SQL wygląda następująco:

ALTER TABLE table_name ADD yes_no BIT

Jeśli chcesz utworzyć nową tabelę, można zrobić: CREATE TABLE table_name (yes_no BIT).


19

Możesz użyć typu danych bit

Wstawione wartości większe niż 0 zostaną zapisane jako „1”

Wstawione wartości mniejsze niż 0 zostaną zapisane jako „1”

Wartości wstawione jako „0” zostaną zapisane jako „0”

Dotyczy to MS SQL Server 2012 Express


1
Czy jesteś pewien oświadczenia dotyczącego wartości mniejszych niż 0?
BiLaL,

3
@BiLaL Jest to powszechne zachowanie w większości języków. 0jest fałszem, każda 0liczba nie będąca liczbą jest prawdą. Często było również tak, że -1 jest domyślną wartością true, ponieważ w podpisanym pliku binarnym ma każdy bit ustawiony na 1. W dzisiejszych czasach bardzo często widzi się 1 jako domyślną wartość true (tylko najmniej znaczący zestaw bitów).
CJ Dennis

16

Istnieją już odpowiedzi mówiące o użyciu bitu. Dodam więcej do tych odpowiedzi.

Należy użyć bitu do reprezentowania wartości logicznych.

Uwagi z artykułu MSDN.

Bit może przyjmować wartość 1, 0 lub NULL.

Aparat baz danych programu SQL Server optymalizuje przechowywanie kolumn bitowych. Jeśli w tabeli jest 8 lub mniej kolumn bitowych, kolumny są zapisywane jako 1 bajt. Jeśli jest od 9 do 16 bitów kolumn, kolumny są przechowywane jako 2 bajty i tak dalej.

Wartości ciągu PRAWDA i FAŁSZ można przekonwertować na wartości bitowe: PRAWDA jest konwertowana na 1, a FAŁSZ na 0.

Konwersja na bit promuje każdą niezerową wartość do 1.

Odniesienie

Uwaga: Dobrą praktyką jest utrzymywanie wartości jako 1 i 0 tylko dla typu danych NOT NULL

Ponieważ Bit ma wartości 1, 0 i NULL. Zobacz tabelę prawdy. Więc odpowiednio zaplanuj wartości. Może to powodować zamieszanie, dopuszczając wartość NULL dla typu danych bitowych.

wprowadź opis zdjęcia tutaj

Odniesienie


15

Przykładowe użycie podczas tworzenia tabeli:

[ColumnName]     BIT   NULL   DEFAULT 0

12

Możesz użyć BITpola

Aby utworzyć nową tabelę:

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

Dodawanie kolumny w istniejącej tabeli:

ALTER TABLE Tb_Table1 ADD BitColumn  BIT DEFAULT 1

Aby wstawić rekord:

INSERT Tb_Table1 VALUES(11,0)

9

bitbędą najprostsze i zajmą najmniej miejsca. Niezbyt gadatliwy w porównaniu do „T / N”, ale nie mam nic przeciwko.


4
Myślę, że lepiej - nie musisz się martwić o Y == y i N = n, czysto prawda lub fałsz. Intencja jest całkowicie oczywista i nie ma „specjalnych” przypadków, na które zapraszają pola jednoznakowe :)
Rob Grant

5

bitjest najbardziej odpowiednią opcją. W przeciwnym razie kiedyś użyłem intdo tego celu. 1dla truei 0dla false.


2
Zwykle używane jest 0 dla False i niezerowe dla True.
Edu,

2
jest wiele smaków lub prawda może powiedzieć dobry polityk: D
Buda Florin

1

W SQL Server Management Studio dowolnej wersji, użyj BITjako typu danych

który zapewni Ci opcje Truelub Falsewartość. jeśli chcesz użyć Tylko 1lub 0możesz użyć tej metody:

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

Ale będę ściśle doradzać BITjako NAJLEPSZĄ opcję. Mam nadzieję, że to w pełni pomoże komuś.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.