Значения NULL исключены из результатов

Одна из функций моего кода требует, чтобы пользователь вводил динамическое предложение «WHERE» для запроса SQL.
затем это предложениеwhere добавляется к sql и выполняется на сервере MS Sql с использованием Spring Boot - шаблона JDBC. напримерЭтот код работает хорошо, если есть значение, отличное от Null, но он пропускает строки со значениями NULL в столбце страны.

Согласно документации MS Sql, он пропускает значения NULL, поскольку ANSI_NULLS включен в соединении jdbc (свойство по умолчанию). Поэтому я попытался установить свойство с помощью команды «SET ANSI_NULLS OFF», используя метод выполнения шаблона jdbc.

      jdbctemplate.execute ("SET ANSI_NULLS OFF")
jdbctemplate.query("SELECT * From Customer_Vehicles where Country in ( 'USA', 'Canada')");

Это решение хорошо работает для сравнения строк, но не применимо к числовым значениям, таким как пробег <25000, например.не возвращает строку, если пробег равен NULL.
То же самое объясняется в документации MS: https://learn.microsoft.com/en-us/sql/t-sql/statements/set-ansi-nulls-transact-sql?view=sql-server-ver16 .

Есть ли способ включить в сравнение значения NULL (независимо от типа данных)?

Примечание. Пользователи могут использовать функцию ISNULL, но пользователи не желают изменять свои предложения SET of WHERE, используемые в устаревшем приложении.

1 ответ

Вместо того, чтобы возиться сANSI_NULLS(чего никогда не следует делать из-за проблем совместимости с новыми функциями, такими как индексированные представления иMERGE), вместо этого просто добавьте в запрос условие, включающее значения NULL.

      SELECT cv.*
FROM Customer_Vehicles cv
WHERE (cv.Country in ('USA', 'Canada') OR cv.Country IS NULL)
  AND (cv.mileage < 25000 OR cv.mileage IS NULL);
Другие вопросы по тегам