Як створити бульне поле так / ні на SQL сервері?


328

Яка найкраща практика для створення yes/noтобто Booleanполя при перетворенні з access databaseабо загалом?

Відповіді:


441

Еквівалент - BITполе.

У SQLвикористанні 0та 1для встановлення бітового поля (подібно до поля "так / ні" в Access). У студії управління воно відображається як хибне / справжнє значення (принаймні, в останніх версіях).

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


3
І якщо ви зв’яжете таблицю в базі даних Access, true матиме значення -1, а false буде мати значення 0. Принаймні, в Access 2003. (Це зручна у мене версія, яка була підключена до бази даних клієнта MSSQL).
Генрік Ерландссон

2
Зверніть увагу, що це не зовсім рівнозначно. Якщо скалярна функція трохи повертається, вам все-таки потрібно перевірити, чи вона дорівнює 0 або 1. Наприклад, dbo.IsReturnsBit (значення) = 1
Даррен Гріффіт,

@ D-Money: Так, але порівняння потрібно робити лише в тому випадку, якщо ви хочете використовувати значення в умові. Якщо ви використовуєте значення в результаті, то не слід робити порівняння.
Guffa

Re Mgt Studio, якщо ви копіюєте + вставляєте дані, потрібно також мати їх як True / False, а не як 1 чи 0.
gorlaz

110

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


1
як BITзазначено в стандарті SQL? Мені важко це знайти. Найближчий я міг побачити - "булівський тип".
asgs

1
Ви взагалі стурбовані тим, що семантика бітів і булей відрізняється?
Дарт Егрегійний


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 як значення за замовчуванням для істинного (лише найменш значущий встановлений біт).
CJ Dennis

16

Вже є відповіді, що говорять про використання Біта. До цих відповідей я додам більше.

Ви повинні використовувати біт для представлення булевих значень.

Зауваження зі статті MSDN.

Біт може приймати значення 1, 0 або NULL.

Система баз даних SQL Server оптимізує зберігання бітових стовпців. Якщо у таблиці є 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.
Еду

2
є багато ароматів чи правда, може сказати хороший політик: D
Буда Флорін

1

У студії управління SQL Server будь-якої версії використовувати 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.