Как создать логическое поле да / нет в SQL-сервере?


328

Какова наилучшая практика для создания поля yes/noie Booleanпри преобразовании из access databaseили в целом?

Ответы:


441

Эквивалентом является BITполе.

В SQLиспользовании 0и 1установить битовое поле (так же , как да / нет поля в Access). В Management Studio оно отображается как значение false / true (по крайней мере, в последних версиях).

При доступе к базе данных через ASP.NET она будет представлять поле как логическое значение.


3
И если вы свяжете таблицу в базе данных Access, true будет иметь значение -1, а false будет иметь значение 0. По крайней мере, в Access 2003. (Это удобная версия, которая была подключена к базе данных клиента MSSQL).
Хенрик Эрландссон,

2
Обратите внимание, что это не совсем эквивалентно. Если скалярная функция возвращает бит, вам все равно нужно проверить, равен ли он 0 или 1. Например, dbo.IsReturnsBit (value) = 1
Даррен Гриффит,

@ D-Money: Да, но вам нужно только сравнить, если вы хотите использовать значение в условии. Если вы используете значение в результате, то вам не следует делать сравнение.
Гуффа

Re Mgt Studio, если вы копируете и вставляете данные, вам нужно, чтобы они также имели значение True / False, а не 1 или 0.
gorlaz

110

Тип BITданных обычно используется для хранения booleanзначений ( 0для false, 1для true).


1
как BITуказано в стандарте SQL? Мне трудно найти его. Самое близкое, что я мог видеть, это "Булев тип".
просит

1
Вас вообще беспокоит, что семантика битов и логических значений различна?
Дарт Egregious


20

Вы можете использовать BITполе.

Для добавления столбца BIT в существующую таблицу команда SQL будет выглядеть следующим образом:

ALTER TABLE table_name ADD yes_no BIT

Если вы хотите создать новую таблицу, вы можете сделать: CREATE TABLE table_name (yes_no BIT).


19

Вы можете использовать тип данных bit

Вставленные значения, которые больше 0, будут сохранены как '1'

Вставленные значения, которые меньше 0, будут сохранены как '1'

Значения, вставленные как «0», будут сохранены как «0»

Это верно для MS SQL Server 2012 Express


1
Вы уверены в утверждении относительно значений меньше 0?
BiLaL

3
@BiLaL Это обычное поведение для большинства языков. 0ложно, любое не 0число верно. Также было принято, что -1 является значением по умолчанию для true, потому что в двоичном формате со знаком каждый бит установлен в 1. В настоящее время очень часто встречается значение 1 в качестве значения по умолчанию для true (установлен только самый младший значащий бит).
CJ Деннис

16

Уже есть ответы, говорящие об использовании Бита. Я добавлю больше к этим ответам.

Вы должны использовать бит для представления логических значений.

Замечания из статьи MSDN.

Бит может принимать значение 1, 0 или NULL.

Компонент SQL Server Database Engine оптимизирует хранение битовых столбцов. Если в таблице 8 или менее битовых столбцов, столбцы сохраняются как 1 байт. Если столбцы имеют размер от 9 до 16 бит, столбцы сохраняются в виде 2 байтов и т. Д.

Строковые значения TRUE и FALSE могут быть преобразованы в битовые значения: TRUE преобразуется в 1, а FALSE преобразуется в 0.

Преобразование в бит повышает любое ненулевое значение до 1.

Ссылка

Примечание. Рекомендуется хранить значения 1 и 0 только с типом данных. NOT NULL

Бит имеет значения 1, 0 и NULL. Смотрите таблицу истинности для этого. Так что планируйте значения соответственно. Это может добавить путаницу, допуская значение NULL для типа данных бит.

введите описание изображения здесь

Ссылка


15

Пример использования при создании таблицы:

[ColumnName]     BIT   NULL   DEFAULT 0

12

Вы можете использовать BITполе

Чтобы создать новую таблицу:

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

Добавление столбца в существующую таблицу:

ALTER TABLE Tb_Table1 ADD BitColumn  BIT DEFAULT 1

Чтобы вставить запись:

INSERT Tb_Table1 VALUES(11,0)

9

bitбудет самым простым и также займет меньше всего места. Не очень многословно по сравнению с "Y / N", но я в порядке с этим.


4
Я думаю, лучше - не нужно беспокоиться о Y == y и N = n, чисто верно или неверно. Намерение совершенно очевидно, и не существует «особых» случаев, которые могут предложить односимвольные поля :)
Роб Грант

5

bitэто наиболее подходящий вариант. В противном случае я однажды использовал intдля этой цели. 1для trueи 0для false.


2
Обычно используется 0 для False и ненулевое значение для True.
Edu

2
Есть много ароматов или правда может сказать хороший политик: D
Буда Флорин

1

В SQL Server Management Studio любой версии используйте в BITкачестве типа данных

который предоставит вам Trueили Falseварианты значения. в случае, если вы хотите использовать только 1или 0затем вы можете использовать этот метод:

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

Но я буду строго советовать BITкак ЛУЧШИЙ Вариант. Надеюсь, что это полностью поможет кому-то.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.