2016-02-29 4 views
3

У меня есть таблица в моем SQL Server 2012 следующим образом,SQL Server - BIT типа данных Выпуск

CREATE TABLE TEST (ID INT,NAME VARCHAR(100),STATUS BIT); 

Я вставил данные, как это, по ошибке,

INSERT INTO TEST SELECT 1,'A',2; 

Когда я опрашиваюсь В результате я нашел столбец «STATUS», хранящий «1». Независимо от значения, которое я вставляю вместо «0», он сохраняет «1». Я чувствовал, что если я определяю столбцы как BIT, тогда он не должен позволять вставлять какие-либо значения, кроме 0 и 1.

Есть ли какой-либо флаг трассировки, который ограничивает такую ​​вставку? Я использую SQL Server 2012 SP3.

+1

Что вы имеете в виду "любое значение, я ввожу"? пример значения пожалуйста? – Haris

+1

Я имел в виду что угодно, кроме «0». Я привел пример «2» в моем вопросе. –

+0

Это потому, что бит может принимать только 0 или 1, этот тип данных используется как логическое значение для true и false. – Haris

ответ

3

Использование типа данных бит.

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

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

Преобразование биту способствует любое ненулевое значение 1.»

MSDN

+0

прошли через эту ссылку MSDN, но как ограничить вставку любого значения, кроме 0 и 1, без определения ограничения CHECK для этого столбца. Есть ли флаг трассировки или какие-либо настройки? Я заметил, что в MySQL он ограничивает такую ​​вставку с ошибкой «Data Too Long» –

+0

, почему вы не помещаете это ограничение в свое приложение до того, как значения вставляются в базу данных? или это не вариант? – Haris

+0

Почему вы не хотите использовать ограничение CHECK? –

Смежные вопросы