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

328

Jaka jest najlepsza praktyka tworzenia pola yes/noie Booleanpodczas konwertowania z access databaselub ogólnie?

leora
źródło

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ą.

Guffa
źródło
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).

Alex Martelli
źródło
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
25

Możesz użyć bittypu kolumny.

Mark Byers
źródło
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).

John Mark
źródło
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

P_Fitz
źródło
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

Somnath Muluk
źródło
15

Przykładowe użycie podczas tworzenia tabeli:

[ColumnName]     BIT   NULL   DEFAULT 0
Torina
źródło
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)
Sachith
źródło
9

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

okej
źródło
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.

Baqer Naqvi
źródło
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ś.

PatsonLeaner
źródło