Làm thế nào để bạn tạo một trường boolean có / không trong máy chủ SQL?


327

Cách thực hành tốt nhất để tạo trường yes/notức là Booleankhi chuyển đổi từ một access databasehoặc nói chung là gì?

Câu trả lời:


440

Tương đương là một BITlĩnh vực.

Trong SQLbạn sử dụng 01để đặt trường bit (giống như trường có / không trong Access). Trong Management Studio, nó hiển thị dưới dạng giá trị sai / đúng (ít nhất là trong các phiên bản gần đây).

Khi truy cập cơ sở dữ liệu thông qua ASP.NET, nó sẽ hiển thị trường dưới dạng giá trị boolean.


3
Và nếu bạn liên kết bảng trong cơ sở dữ liệu Access, true sẽ có giá trị -1 và false sẽ có giá trị 0. Ít nhất là trong Access 2003. (Đây là phiên bản tôi có sẵn được kết nối với cơ sở dữ liệu MSSQL của khách hàng).
Henrik Erlandsson

2
Xin lưu ý rằng nó không chính xác tương đương. Nếu một hàm vô hướng trả về một bit, bạn vẫn cần kiểm tra xem nó là 0 hay 1. Ví dụ: dbo.IsReturnsBit (value) = 1
Darren Griffith

@ D-Money: Có, nhưng bạn chỉ cần thực hiện so sánh nếu bạn muốn sử dụng giá trị trong một điều kiện. Nếu bạn sử dụng giá trị trong kết quả, thì bạn không nên so sánh.
Guffa

Re Mgt Studio, nếu bạn đang sao chép + dán dữ liệu vào bạn, bạn cũng cần phải có dữ liệu là Đúng / Sai, không phải là 1 hoặc 0.
gorlaz

110

Kiểu BITdữ liệu thường được sử dụng để lưu trữ booleancác giá trị ( 0for false, 1for true).


1
được BITquy định trong tiêu chuẩn SQL? Tôi đang gặp khó khăn trong việc tìm kiếm nó. Cái gần nhất tôi có thể thấy là "Kiểu Boolean".
vào

1
Bạn có lo ngại rằng ngữ nghĩa của bit và booleans là khác nhau không?
Darth Egregious


20

Bạn có thể sử dụng các BITlĩnh vực.

Để thêm cột BIT vào bảng hiện có, lệnh SQL sẽ như sau:

ALTER TABLE table_name ADD yes_no BIT

Nếu bạn muốn tạo một bảng mới, bạn có thể làm : CREATE TABLE table_name (yes_no BIT).


19

Bạn có thể sử dụng kiểu dữ liệu bit

Các giá trị được chèn lớn hơn 0 sẽ được lưu trữ dưới dạng '1'

Các giá trị được chèn nhỏ hơn 0 sẽ được lưu trữ dưới dạng '1'

Các giá trị được chèn là '0' sẽ được lưu trữ dưới dạng '0'

Điều này đúng với MS SQL Server 2012 Express


1
Bạn có chắc chắn về tuyên bố liên quan đến các giá trị nhỏ hơn 0 không?
BiLaL

3
@BiLaL Đây là hành vi phổ biến trên hầu hết các ngôn ngữ. 0là sai, bất kỳ 0số nào là đúng. Giá trị mặc định là -1 là giá trị mặc định là đúng vì trong nhị phân đã ký, nó có mọi bit được đặt thành 1. Ngày nay, rất phổ biến để xem 1 là giá trị mặc định cho true (chỉ tập bit nhỏ nhất có ý nghĩa).
CJ Dennis

16

Đã có câu trả lời cho biết sử dụng Bit. Tôi sẽ thêm nhiều hơn vào những câu trả lời này.

Bạn nên sử dụng bit để biểu diễn các giá trị Boolean.

Nhận xét từ bài viết MSDN.

Bit có thể lấy giá trị 1, 0 hoặc NULL.

Công cụ cơ sở dữ liệu SQL Server tối ưu hóa việc lưu trữ các cột bit. Nếu có 8 cột bit trở xuống trong một bảng, các cột được lưu dưới dạng 1 byte. Nếu có từ 9 đến 16 cột, các cột được lưu dưới dạng 2 byte, v.v.

Các giá trị chuỗi TRUE và FALSE có thể được chuyển đổi thành giá trị bit: TRUE được chuyển đổi thành 1 và FALSE được chuyển đổi thành 0.

Chuyển đổi sang bit sẽ thúc đẩy bất kỳ giá trị khác nào thành 1.

Tài liệu tham khảo

Lưu ý: Nên giữ các giá trị là 1 và 0 với kiểu dữ liệu NOT NULL

Vì Bit có các giá trị 1, 0 và NULL. Xem bảng sự thật cho điều này. Vì vậy, kế hoạch giá trị phù hợp. Nó có thể thêm sự nhầm lẫn bằng cách cho phép giá trị NULL cho kiểu dữ liệu bit.

nhập mô tả hình ảnh ở đây

Tài liệu tham khảo


15

Sử dụng mẫu trong khi tạo bảng:

[ColumnName]     BIT   NULL   DEFAULT 0

12

Bạn có thể sử dụng BITtrường

Để tạo bảng mới:

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

Thêm cột trong bảng hiện có:

ALTER TABLE Tb_Table1 ADD BitColumn  BIT DEFAULT 1

Để chèn bản ghi:

INSERT Tb_Table1 VALUES(11,0)

9

bitsẽ là đơn giản nhất và cũng chiếm ít không gian nhất. Không dài dòng so với "Y / N" nhưng tôi ổn với nó.


4
Tôi nghĩ tốt hơn - không cần phải lo lắng về Y == y và N = n, hoàn toàn đúng hay sai. Ý định là hoàn toàn rõ ràng và không có trường hợp "đặc biệt" nào mà các trường nhân vật đơn mời :)
Rob Grant

5

bitlà lựa chọn phù hợp nhất. Nếu không tôi đã từng sử dụng intcho mục đích đó. 1cho true& 0cho false.


2
Thông thường, nó được sử dụng 0 cho Sai và khác không cho True.
Giáo trình

2
có rất nhiều hương vị hoặc sự thật có thể nói một chính trị gia giỏi: D
Buda Florin

1

Trong SQL Server Management Studio của bất kỳ phiên bản nào, hãy sử dụng BITlàm kiểu dữ liệu

sẽ cung cấp cho bạn Truehoặc Falsetùy chọn Giá trị. trong trường hợp bạn muốn sử dụng Chỉ 1hoặc 0sau đó bạn có thể sử dụng phương pháp này:

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

Nhưng tôi sẽ tư vấn nghiêm túc BITlà lựa chọn TỐT NHẤT . Hy vọng nó sẽ giúp được ai đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.