TSQL: нет значения вместо Null - PullRequest
       6

TSQL: нет значения вместо Null

3 голосов
/ 04 декабря 2008

Из-за странного запроса я не могу поместить null в базу данных, если нет значения. Мне интересно, что я могу даром поставить в магазине вместо null.

Например:

insert into blah (blah1) values (null) 

Есть ли что-то вроде ничего или пустое для "blah1" вместо использования null?

Ответы [ 6 ]

5 голосов
/ 04 декабря 2008

Я бы отодвинул этот странный запрос. Это именно то, для чего NULL используется в SQL, чтобы обозначить отсутствующее или неприменимое значение в столбце.

Испытатель испытывает горе из-за логики SQL с NULL?

edit: Хорошо, я прочитал ваш ответ с дополнительной информацией об этом задании (кстати, как правило, вы должны отредактировать свой оригинальный вопрос вместо публикации дополнительной информации в ответе).

Вы должны будете объявить все столбцы как NOT NULL и назначить специальное значение в домене типа данных этого столбца, чтобы обозначить «нет значения». Подходящее значение для выбора может отличаться в каждом конкретном случае, т. Е. Ноль может ничего не значить в столбце person_age, но он может иметь значение в столбце items_in_stock.

Вы должны задокументировать значение без значения для каждого столбца. Но я полагаю, что они также не верят в документацию. : - (

1 голос
/ 04 декабря 2008

Зависит от типа данных столбца. Для чисел (целых чисел и т. Д.) Это может быть ноль (0), но если varchar, то это может быть пустая строка ("").

Я согласен с другими ответами, что NULL лучше всего подходит для этого, потому что он выходит за пределы всех типов данных, обозначая отсутствие значения. Таким образом, нулевая и пустая строка могут служить в качестве обходного пути / взлома, но они сами по себе все еще являются фактическими значениями, которые могут иметь бизнес-предметную область, отличную от «не значение».

(Если поддерживается только язык SQL , тип значения "Не применимо" (N / A), который будет служить альтернативой NULL ...)

0 голосов
/ 04 декабря 2008

Существует некоторое требование к не использовать значения NULL. Значения NULL могут вызвать сильную головную боль, когда они находятся в поле, которое будет включено в предложение JOIN или WHERE, или в поле, которое будет агрегировано.

Некоторые реализации SQL (такие как MSSQL) запрещают включать в индексы пустые поля.

MSSQL ведет себя особенно неожиданно, когда NULL оценивается на равенство. Значение NULL в поле PaymentDue означает то же самое, что и ноль, когда мы ищем записи, которые актуальны? Что если у нас есть имена в таблице, а у кого-то нет второго имени? Можно предположить, что может быть сохранена либо пустая строка, либо значение NULL, но как нам получить полный список людей, не имеющих отчества?

В общем, я предпочитаю избегать значений NULL. Если вы не можете представить то, что хотите сохранить, используя число (включая ноль) или строку (включая пустую строку, как упоминалось ранее), тогда вам, вероятно, стоит присмотреться к тому, что вы пытаетесь сохранить. Возможно, вы пытаетесь передать более одного фрагмента данных в одном поле.

0 голосов
/ 04 декабря 2008

Существует разница между NULL как назначенными значениями (например, вставленными в столбец) и NULL как артефактом SQL (как для поля в отсутствующей записи для OUTER JOIN. Это может быть чуждое понятие для этих пользователей. людей, использующих Access или любую базу данных только для ведения списков из одной таблицы.) Я не удивлюсь, если наивные пользователи предпочтут использовать альтернативу для назначений; и хотя противно, это должно работать хорошо. Просто позвольте им использовать все, что они захотят.

0 голосов
/ 04 декабря 2008

Если вы используете varchar или эквивалентное поле, используйте пустую строку.

Если вы используете числовое поле, например, int, вам придется заставить пользователя вводить данные, иначе придет значение, которое означает NULL.

Я не завидую вашей ситуации.

0 голосов
/ 04 декабря 2008

Является ли null допустимым значением для всего, что вы храните?

  • Используйте значение часового типа, например INT32.MaxValue, пустую строку или «XXXXXXXXXX», и предположите, что оно никогда не будет допустимым значением
  • Добавьте битовый столбец «Exists», который будет заполнен значением true во время вставки.

Редактировать: Но да, я согласен с другими ответами, что попытка изменить требования может быть лучше, чем попытка решить проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...