В SQL Server есть логический тип данных. Его значения могут быть TRUE
, FALSE
или UNKNOWN
. Однако логический тип данных является только результатом логического выражения, содержащего некоторую комбинацию операторов сравнения (например, =
, <>
, <
, >=
) или логических операторов (например, AND
, OR
, IN
, EXISTS
). Логические выражения допускаются только в нескольких местах, включая предложение WHERE
, предложение HAVING
, предложение WHEN
выражения CASE
или предикат оператора управления потоком IF
или WHILE
.
Для всех других случаев использования, включая тип данных столбца в таблице, логическое значение не допускается. Для этих других применений предпочтителен тип данных BIT
. Он ведет себя как суженный INTEGER
, который допускает только значения 0
, 1
и NULL
, если только он не ограничен с помощью ограничения столбца NOT NULL
или ограничения CHECK
.
Чтобы использовать столбец BIT
в логическом выражении, его необходимо сравнить с помощью оператора сравнения, такого как =
, <>
или IS NULL
. например,
SELECT
a.answer_body
FROM answers AS a
WHERE a.is_accepted = 0;
С точки зрения форматирования значение bit
обычно отображается как 0
или 1
в клиентском программном обеспечении. Когда требуется более удобный для пользователя формат, и он не может быть обработан на уровне приложения перед базой данных, он может быть преобразован «точно в срок» с использованием выражения CASE
, например,
SELECT
a.answer_body,
CASE a.is_accepted WHEN 1 THEN 'TRUE' ELSE 'FALSE' END AS is_accepted
FROM answers AS a;
Также возможно сохранение логических значений в виде символьных типов данных, таких как char(1)
или varchar(5)
, но это гораздо менее понятно, требует больше ресурсов хранения / сети и требует ограничений CHECK
для каждого столбца для ограничения недопустимых значений .
Для справки схема таблицы answers
будет выглядеть следующим образом:
CREATE TABLE answers (
...,
answer_body nvarchar(MAX) NOT NULL,
is_accepted bit NOT NULL DEFAULT (0)
);