Значения NULL исключены из результатов
Одна из функций моего кода требует, чтобы пользователь вводил динамическое предложение «WHERE» для запроса SQL.
затем это предложениеwhere добавляется к sql и выполняется на сервере MS Sql с использованием Spring Boot - шаблона JDBC. например
Согласно документации 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, например.
То же самое объясняется в документации 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);