Bagaimana Anda membuat bidang boolean ya / tidak di SQL server?

328

Apa praktik terbaik untuk membuat bidang yes/noyaitu Booleanketika mengkonversi dari access databaseatau secara umum?

leora
sumber

Jawaban:

441

Yang setara adalah BITbidang.

Di SQLAnda menggunakan 0dan 1untuk mengatur bidang bit (seperti bidang ya / tidak di Access). Di Management Studio ditampilkan sebagai nilai false / true (setidaknya dalam versi terbaru).

Saat mengakses database melalui ASP.NET, ia akan mengekspos bidang sebagai nilai boolean.

Guffa
sumber
3
Dan jika Anda menautkan tabel di Access database, true akan memiliki nilai -1 dan false akan memiliki nilai 0. Setidaknya di Access 2003. (Ini adalah versi yang saya miliki yang terhubung ke database MSSQL pelanggan).
Henrik Erlandsson
2
Harap dicatat bahwa itu tidak persis sama. Jika fungsi skalar mengembalikan sedikit, Anda masih perlu menguji apakah itu 0 atau 1. Misalnya, dbo.IsReturnsBit (nilai) = 1
Darren Griffith
@ D-Money: Ya, tetapi Anda hanya perlu melakukan perbandingan jika Anda ingin menggunakan nilai dalam suatu kondisi. Jika Anda menggunakan nilai dalam hasil, maka Anda tidak harus melakukan perbandingan.
Guffa
Re Mgt Studio, jika Anda menyalin + menempelkan data di Anda harus memilikinya sebagai Benar / Salah juga, bukan sebagai 1 atau 0.
gorlaz
110

Tipe BITdata umumnya digunakan untuk menyimpan booleannilai ( 0untuk false, 1untuk true).

Alex Martelli
sumber
1
adalah BITditentukan dalam standar SQL? Saya kesulitan menemukannya. Yang paling dekat yang bisa saya lihat adalah "tipe Boolean".
asgs
1
Apakah Anda khawatir bahwa semantik bit dan boolean berbeda?
Darth Egregious
25

Anda dapat menggunakan bitjenis kolom.

Mark Byers
sumber
20

Anda bisa menggunakan BITbidang tersebut.

Untuk menambahkan kolom BIT ke tabel yang ada, perintah SQL akan terlihat seperti:

ALTER TABLE table_name ADD yes_no BIT

Jika Anda ingin membuat tabel baru, Anda bisa melakukan: CREATE TABLE table_name (yes_no BIT).

John Mark
sumber
19

Anda bisa menggunakan tipe data bit

Nilai yang dimasukkan yang lebih besar dari 0 akan disimpan sebagai '1'

Nilai yang dimasukkan yang kurang dari 0 akan disimpan sebagai '1'

Nilai yang dimasukkan sebagai '0' akan disimpan sebagai '0'

Ini berlaku untuk MS SQL Server 2012 Express

P_Fitz
sumber
1
Apakah Anda yakin dengan pernyataan tentang nilai kurang dari 0?
BiLaL
3
@BiLaL Ini adalah perilaku umum di sebagian besar bahasa. 0itu salah, semua non- 0angka benar. Itu juga umum untuk -1 menjadi nilai default untuk true karena dalam biner yang ditandatangani ia memiliki setiap bit yang diatur ke 1. Saat ini sangat umum untuk melihat 1 sebagai nilai default untuk true (hanya bit set paling tidak signifikan).
CJ Dennis
16

Sudah ada jawaban yang mengatakan penggunaan Bit. Saya akan menambahkan lebih banyak ke jawaban ini.

Anda harus menggunakan bit untuk mewakili nilai Boolean.

Keterangan dari artikel MSDN.

Bit dapat mengambil nilai 1, 0, atau NULL.

Mesin Database SQL Server mengoptimalkan penyimpanan kolom bit. Jika ada 8 atau kurang bit kolom dalam sebuah tabel, kolom disimpan sebagai 1 byte. Jika ada dari 9 hingga 16 bit kolom, kolom disimpan sebagai 2 byte, dan seterusnya.

Nilai string TRUE dan FALSE dapat dikonversi ke nilai bit: TRUE dikonversi ke 1 dan FALSE dikonversi ke 0.

Mengubah ke bit mempromosikan nilai bukan nol ke 1.

Referensi

Catatan: Ini adalah praktik yang baik untuk menjaga nilai sebagai 1 dan 0 hanya dengan tipe data NOT NULL

Karena Bit memiliki nilai 1, 0 dan NULL. Lihat tabel kebenaran untuk ini. Jadi rencanakan nilai yang sesuai. Mungkin menambah kebingungan dengan memungkinkan nilai NULL untuk tipe data bit.

masukkan deskripsi gambar di sini

Referensi

Somnath Muluk
sumber
15

Contoh penggunaan saat membuat tabel:

[ColumnName]     BIT   NULL   DEFAULT 0
torina
sumber
12

Anda bisa menggunakan BITbidang tersebut

Untuk membuat tabel baru:

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

Menambahkan Kolom di Tabel yang ada:

ALTER TABLE Tb_Table1 ADD BitColumn  BIT DEFAULT 1

Untuk Memasukkan catatan:

INSERT Tb_Table1 VALUES(11,0)
Sachith
sumber
9

bitakan menjadi yang paling sederhana dan juga memakan ruang paling sedikit. Tidak terlalu verbose dibandingkan dengan "Y / N" tapi saya baik-baik saja dengan itu.

baik w
sumber
4
Lebih baik saya pikir - tidak perlu khawatir tentang Y == y dan N = n, murni benar atau salah. Niat benar-benar jelas, dan tidak ada kasus "istimewa" yang diundang bidang karakter tunggal :)
Rob Grant
5

bitadalah pilihan yang paling cocok. Kalau tidak, saya pernah menggunakan intuntuk tujuan itu. 1untuk true& 0untuk false.

Baqer Naqvi
sumber
2
Biasanya digunakan 0 untuk False dan non-nol untuk True.
Edu
2
ada banyak citarasa atau benar yang bisa dikatakan politisi yang baik: D
Buda Florin
1

Di SQL Server Management Studio versi apa pun, gunakan BITsebagai tipe data

yang akan memberi Anda Trueatau FalseOpsi nilai. jika Anda hanya ingin menggunakan 1atau 0Anda dapat menggunakan metode ini:

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

Tapi saya akan menyarankan BITsebagai Opsi TERBAIK . Semoga sepenuhnya itu membantu seseorang.

PatsonLeaner
sumber