NullDisplayText в разметке против ISNULL (поле, 0) в SQL? - PullRequest
0 голосов
/ 17 мая 2010

Какой подход лучше использовать:

  • BoundField.NullDisplayText не установлено. Случай NULL предусмотрен в запросе SQL, т. Е. SELECT ISNULL(amount, 0) FROM table

или

  • BoundField.NullDisplayText установлено, например, «0,00%». Случай NULL не предусмотрен в запросе SQL, т. Е. SELECT amount FROM table

Что вы думаете?

Ответы [ 4 ]

3 голосов
/ 17 мая 2010

Очевидно, первый, потому что вы фильтруете с ISNULL.

2 голосов
/ 17 мая 2010

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

Преобразуя нули в нули, вы указываете для всех систем, которые используют запрос, что ноль равняется пользователю, намеренно вводящему ноль. Если это действительно так, тогда хорошо, используйте Coalesce вместо IsNull и конвертировать нули в нули. Однако, если есть даже самая отдаленная вероятность того, что запрос будет использован повторно и что отсутствие значения может быть обработано иначе, чем запись нуля, я бы возвратил нули на средний уровень и позволил бы ему решить, что с этим делать. .

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

Можете ли вы сделать лучшее из обоих?

  • ISNULL обслуживает только этот отдельный случай
  • Форматирование / логика должны быть в интерфейсе пользователя
  • Другие клиенты, использующие «сумму», могут ожидать NULL, поэтому у вас теперь непоследовательный «контракт»
  • 0 означает ноль, NULL означает неизвестный / ничего: 2 разных состояния
1 голос
/ 17 мая 2010

Разница в том, что 0,00 означает, что поле имеет значение, тогда как NULL означает, что противоположное Следовательно, с точки зрения безопасности данных первое верно.

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