Skip to content

Крутая штука в SQL Server 2022 – IS DISTINCT FROM

Пересказ статьи Koen Verbeeck. Cool Stuff in SQL Server 2022 – IS DISTINCT FROM


Я написал серию статей в блоге о некоторых замечательных особенностях в облачных хранилищах данных для платформы Snowflake; одной из которых был предикат IS [NOT] DISTINCT FROM. Я был рад обнаружить эту вещь теперь и в языке T-SQL, начиная с предварительной версии SQL Server 2022 CTP 2.1. Вы можете найти официальную документацию здесь.
В двух словах: IS [NOT] DISTINCT FROM позволяет вам сравнивать два выражения (во многом похоже на = и <>), но этот предикат учитывает NULL-значения. В основном, это более краткий способ написать следующее:

SELECT *
FROM dbo.FactInternetSales
WHERE OrderDate = ISNULL(@orderdate,'1900-01-01');

Раньше вам приходилось беспокоиться о NULL-значениях при работе с параметрами или столбцами, допускающими NULL-значения. Даже если столбец не допускал значения NULL, они могли появиться при использовании, например, LEFT OUTER JOIN. Поэтому, чтобы гарантировать, что предложение WHERE или соединения работают так, как вы предполагали, вам требовалось выполнить некоторую дополнительную работу для этих надоедливых NULL-значений. Но не теперь! Ну, после апгрейда к SQL Server 2022, по крайней мере. :-)

С помощью IS NOT DISTINCT FROM, мы можем переписать SQL подобным образом:

SELECT * FROM dbo.FactInternetSales
WHERE OrderDate IS NOT DISTINCT FROM @orderdate;

Привычка написания предложений WHERE и JOIN с использованием этого нового предиката (или любого булева сравнения) поможет несколько избавить вас от головной боли.

Вы сможете найти больше информации об этом предикате и других новых штучках в T-SQL в прекрасной статье Ицика Бен-Гана (Itzik Ben-Gan): Additional T-SQL Improvements in SQL Server 2022. И ознакомьтесь с официальным анонсом CTP 2.1, чтобы узнать о других новых функциях.
Категории: T-SQL

Обратные ссылки

Нет обратных ссылок

Комментарии

Показывать комментарии Как список | Древовидной структурой

Нет комментариев.

Автор не разрешил комментировать эту запись

Добавить комментарий

Enclosing asterisks marks text as bold (*word*), underscore are made via _word_.
Standard emoticons like :-) and ;-) are converted to images.

To prevent automated Bots from commentspamming, please enter the string you see in the image below in the appropriate input box. Your comment will only be submitted if the strings match. Please ensure that your browser supports and accepts cookies, or your comment cannot be verified correctly.
CAPTCHA

Form options

Добавленные комментарии должны будут пройти модерацию прежде, чем будут показаны.