Общая замена значений NULL в SQL Представления - PullRequest
0 голосов
/ 17 февраля 2020

У нас есть довольно свежая версия SQL Сервера, который мы используем для извлечения данных в SAP BW Datawarehouse . Мы используем представления для доступа к данным в таблицах на сервере SQL. Некоторые поля в этих таблицах содержат значения NULL. Они переносятся в SAP как строковое значение ('NULL') вместо пустого, что вызывает у нас большую головную боль.

Я понимаю, что мы можем использовать COALESCE () в представлениях, чтобы заменить значения NULL желаемым значением по умолчанию ('', 0, '1900-01-01', et c .) Однако делать это для каждого поля NULL, с которым мы сталкиваемся, не очень разумно

Есть ли лучший способ решения этой проблемы за исключением изменения таблиц, чтобы не допустить значения NULL? Можно ли включить пользовательскую глобальную функцию, которая автоматически применяется ко всем полям, выбранным в представлении, без необходимости вызова этой функции для каждого поля отдельно?

1 Ответ

0 голосов
/ 19 февраля 2020

@ Ответ Джероена Мостерта в комментариях отвечает на мой вопрос.

Не существует глобальных переключателей, флагов или настроек, которые волшебным образом исключают для вас значения NULL . Наиболее близким является то, что COALESCE (, '') будет «работать» (для некоторых значений «работа») практически для каждого типа (включая DATETIME), за исключением заметного DECIMAL. Вы не можете написать функцию для этого, так как функции в T- SQL не могут возвращать различные типы на основе их ввода. Безусловно, лучшим «исправлением» действительно является исправление шага обработки, хотя бы потому, что окончание дат 1900-01-01 в вашей базе данных обычно нежелательно.

Поэтому единственные варианты

  1. go через каждое поле, которое может содержать значение NULL и очищать его в представлении
  2. обрабатывать значения NULL на принимающей стороне (например, SAP BW); это можно сделать с помощью универсальной функции c, которая будет помещена в процедуру запуска начального уровня, или это можно сделать вручную.

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

...