Могу ли я настроить базу данных SQL Server 2008, чтобы она сохраняла все пустые строки как NULL? - PullRequest
0 голосов
/ 13 мая 2010

В моем текущем проекте было бы удобно исключить пустые строки из домена, так что пустая строка встречается везде, где она обрабатывается как NULL, например, если я ОБНОВЛЯЮ [table] SET [Something] = '' SQL Server должен рассматривать его как SET [Something] = NULL, чтобы при следующем SELECT значение NULL возвращалось как [Something].

Стоит ли использовать триггеры или есть лучший способ?

Ответы [ 3 ]

1 голос
/ 14 февраля 2011

Стоит отметить, что NULL не всегда то же самое, что и пустая строка (хотя сегодня это так, завтра кто-то может смутить удаление своей пустой строки). Например, идентичны ли эти две ситуации:

  1. Пользователь не ввел данные в поле;
  2. Пользователь ввел, а затем удалил данные?

Вам следует подумать о том, имеет ли для вас значение знание того, что поле имело значение, прежде чем принудительно устанавливать все пустые строки в NULL. Также - один пробел - пустая строка? Несколько пробелов? CHR (254)

1 голос
/ 13 мая 2010

Не существует автоматического средства принудительного преобразования пустой строки в ноль. Однако вы можете добавить проверочные ограничения для всех столбцов char, varchar, nchar и nvarchar, для которых требуется, чтобы значение было больше нуля или ноль. Это приведет к тому, что клиентское приложение сгенерирует исключение, если оно не преобразует пустые строки в null.

Помимо использования проверочных ограничений, идеальным местом для обеспечения преобразования пустых строк в NULL является уровень доступа к данным. Вы должны инкапсулировать код, который открывает соединение, выполняет что-то для базы данных и затем закрывает соединение. Предположительно, этот код будет принимать массив аргументов, используемых в качестве параметров для ваших параметризованных запросов. В этом коде он может проверить, является ли тип данных строкой, и если это так, преобразовать его в нуль.

0 голосов
/ 14 февраля 2011

желаю. Все ваши выражения вставки и обновления должны обрабатывать это правильно.

У меня есть функции на нескольких языках, которые я использую для правильного построения строковых выражений. В PHP это

function QuoteOrNull($str)
{
    return empty($str) ? "NULL" : "'$str'" ;
}

Есть еще один для целочисленных значений:

function IntOrNull($num)
{
    return is_null($num) ? "NULL" : intval($num);
}

и т.д.

Все обычные предупреждения о том, что ваши бизнес-правила проводят правильное различие между нулем и нулем, относятся ко второму. Однако я никогда не видел никакой полезной причины для преднамеренной вставки строк нулевой длины. Кажется, когда вы это делаете, кто-то хочет разобраться с ними, и тогда у вас проблемы.

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