T-SQL Language Changes in SQL Server 2022

T-SQL Language Changes in SQL Server 2022

Understanding programming languages is the key to becoming a revered programmer. One of the many languages every programmer should strive to grasp to the latter is SQL (Structured Query Language). SQL is a programming language specifically designed to efficiently manage data held in relational database management systems (RDBMS). The language is useful in handling structured data, which means data that follows a persistent format and clearly shows the relationship between entities and variables.

To cope with evolving technology, SQL has several extensions and among them is T-SQL or Transact-SQL. This is Microsoft's proprietary extension used to interact with relational databases and includes procedural programming, support functions for string processes, and retrieving data from a single row, among other functions. Here are some T-SQL language changes in the latest version of Microsoft SQL Server.

Date_bucket

Initially, on Azure SQL Edge, the data bucket is a simple function that allows you to arrange data in SQL Server with time at the back of your mind. The function simply returns the date time value corresponding to the start of each DateTime bucket from the time stamp defined by the origin. When the origin is not specified, a default value of 12:00 AM on Monday, January 1, 1900, is automatically set.

For better understanding, if you are a geologist recording earth's activities after every half an hour, you might want to group this data on a daily basis and compute aggregates like daily averages. One of the functions involved will be a dating bucket. It is essential when grouping data or calculating periods of days, weeks, or even months.

Generate_series

This function is almost the same as tally tables which is basically a table with well-indexed sequential numbers with 0 or 1 being the starting point. Its arguments are;

• Start

It is the first or original value of an interval and can be a variable or scalar combination of symbols or operators that SQL evaluates to obtain a single data value. It may also include a literal expression of any type, including decimal, smallint, int, or numeric.

• Stop

This is the opposite of the start and implies the last value in the interval. Similar to start, it can be a variable or scalar expression without forgetting a decimal, numeric, smallint, numeric, or int.

Every stop data type must match with the start's data type, and the series stops once the value of the last step exceeds that of the stop.

• [ step ]

Step argument in a series is optional but defines an increment or decrease between different stages in a series. Other than the expression being similar to a start and stop's decimal, int, or numeric, it includes integers (negative and positive expressions) too. However, since we are dealing with intervals, [ step ] expressions cannot be zero. This is because zero does not represent an interval. So note that when programming with [ step ], avoid zero because it will not give you an interval.

To use the latest Generate_series function, a compatibility level of at least 160 is required; otherwise, SQL Server will not find the series function. But the good thing is you don't need to go through complex permission-seeking procedures other than executing simple permission to query input data in the database.

DISTINCT FROM

While many SQL Server experts have strong opinions in favor or against NULLs, you should note that in T-SQL, NULL is not trivial. It often adds complexities when writing codes resulting in pitfalls. Since, in most cases, we usually use operators such as equals (=) and different than (<>) to compare two equalities, possible end results are true, false, and unknown. True and false outcomes are only possible when both comparands are not NULL. If one of the two comparands is NULL, the outcome will be unknown, which is not what most people expect after coding.

Having gone through how the NULL function affects code writing, what exactly is it? NULL is a missing value's placeholder, and to reduce some of its complexities, T-SQL introduced the DISTINCT FROM function.

This function guarantees true or false outcomes after comparing the equality of two expressions, even if one of them is NULL.

GREATEST/LEAST

During programming, MIN and MAX are used to find the smallest and largest value in a set of records. But when you have a set of values, new aggregation GREATEST and LEAST functions become useful.

GREATEST returns the maximum value from a list of comma-separated expressions representing any type of comparable data. The expression can be variables, arithmetic combinations, or string operators. Unfortunately, GREATEST functions do not support more than 254 arguments.

On the flip side, the LEAST function returns the smallest value from a list expression. Like GREATEST, expressions must be separated by a comma, are limited to 254 arguments, and allows you to use scalar subqueries as well as aggregate functions.

STRING_SPLIT

The STRING_SPLIT function is not new to SQL Server, and a few versions already exist. The 2022 version is the latest, with an option of adding a third value as a 1. This allows you to get a value that can be counted. This value is also called an ordinal value.

The function has three arguments; string, separator, and enable_ordinal.

Strings are data values in order or sequence, symbols, and operators that SQL Server evaluates to obtain a single value. For example, varchar. A separator, on the other hand, is a single character of an expression in concatenated substrings. An example is nvarchar(1). Lastly, enable_ordinal value enables or disables ordinal outputs.

Final Thoughts

SQL and Microsoft's T-SQL are common among many coders because of their simplicity and speed. But to keep up with the latest coding demands, engineers at Microsoft often add language changes. Changes to SQL Server 2022 such as DISTINCT FROM and GREATEST/LEAST makes coding cleaner while improving how you manipulate data. Others like Generate_Series are previous versions' developments. Lastly, Data_Buckets allows you to code with time at the back of your mind.