Sql-Server

T-SQL 101: 99 Applying conditional logic with IF

In general, we try to avoid procedural logic when writing T-SQL. However, it is possible.

The most basic procedural statement is the IF statement. It allows us to apply basic conditional logic. Instead of keywords like CASE that allow you to apply logic to determine values, the IF statement allows you to decide which statements are executed.

IF @Value > 10 PRINT 'Large';

The condition can also include other clauses linked with AND and OR:

2025-01-26

T-SQL 101: 98 Using System Variables and Functions in T-SQL

As well as the variables that you declare, SQL Server has a number of built-in system variables and some built-in system functions.

The system variables are the ones with @@ at the start of their name. Here is an example that’s often used:

SELECT @@VERSION;

It is documented here.

On my SQL Server 2022 system, the value returned is this:

Now while that is a reasonable example of a system variable that has been used for a long time, note that it’s a bit messy as there is a lot of information in a single returned value. There are now better ways to get at the system version in a more useful way:

2025-01-25

T-SQL 101: 97 Defining and initializing variables in T-SQL

Variables in T-SQL work very much the way they do in other languages. A variable really is nothing more than a name given to a memory location. In T-SQL, variable names must start with an @ sign. An example would be:

@CustomerName

As well as defining a name, variables have other properties.

The first is that we have a data type. It defines the types of things, like strings or numbers and so on, that can we store in that location.

2025-01-24

SQL Server Execution Plans for Developers and DBAs - new online on-demand course now available

One of the most popular courses that we used to run in person was a Query Performance Tuning and Advanced T-SQL course. I recently finished converting the Advanced T-SQL course to an online format, but a key (no pun intended) part of the Query Performance Tuning course was the content on reading SQL Server execution plans.

For so long, I’ve wanted to get the execution plan content available online, as reading them is such an important skill. Well, we finished it today ! The new course is:

2024-10-30

SQL: Substantial updates to our Advanced T-SQL course

One of our popular courses is Advanced T-SQL for Developers and DBAs.

If you’re still writing T-SQL like it’s SQL Server 2000, or even SQL Server 2016, it’s time to look at what’s changed over the years.

We’ve just pushed out substantial updates to that course. The new content areas pushed out in this update are:

New Module 1 Content: (Using Common Data Types Effectively)

  • UNISTR - embedding Unicode within strings
  • ANSI string concatenation with ||
  • Extensions to TRIM, LTRIM, and RTRIM, particularly for removing characters apart from spaces
  • New options for CURRENT_DATE
  • Truncating dates with DATETRUNC
  • Grouping periods of dates with DATE_BUCKET

New Module 2 Content: (Using Special Data Types)

  • Creating tables of values with GENERATE_SERIES
  • Optimizing optional parameters by using IS [NOT] DISTINCT FROM
  • Working with bits (shifting left, right, counting, and setting and getting bits)

New Module 7 Content: (Ranking, Pivoting, and Grouping Data)

  • Using APPROXIMATE_PERCENTAGE (discrete and continuous) to enhance performance and reduce memory usage
  • Using GREATEST and LEAST to reduce query complexity

New Module 8 Content: (Using TOP, APPLY, and Window Functions)

  • Using named windows to simplify queries
  • New NULL treatment options for window clauses

New Module 10 Content: (Working with JSON Data)

  • New options for storing data by using the json data type
  • Enhanced options for OPENJSON
  • Using ISJSON to check JSON formats, including checking for VALUE, ARRAY, OBJECT, and SCALAR types
  • JSON_PATH_EXISTS helps when working with nullable data
  • Using JSON constructors to create objects and arrays
  • Using the new JSON aggregates

We’re really pleased with this update.

2024-10-09

SDU Tools v24 is now available for download

Just a heads-up that v24 of SDU Tools went out to SDU Insiders last week. If you haven’t used SDU Tools, they are just a large library of functions implemented in T-SQL. You can use them as a full library or use them as examples of code in work you are trying to do.

Backwards Compatibility

We’ve also tried to keep all the code working for all versions of SQL Server that we see clients using. That means from SQL Server 2008 to SQL Server 2022. We also have an Azure SQL DB version.

2024-09-10

Book Review: Deciphering Data Architectures

I had some clear time this morning so I read a recent book called Deciphering Data Architectures (Choosing Between a Modern Data Warehouse, Data Fabric, Data Lakehouse, and Data Mesh) by James Serra.

Price

One comment I need to make is that for some reason, the O’Reilly titles seem to have become more expensive lately, and their freight options are expensive too. It was the same for this book. It was $112 AUD landed at my place. That’s so much more than any similar book that I’ve read lately, and this is not a large book.

2024-08-15

PG Down Under show 3 with guest Ryan Booz is now published!

Welcome to show 3 for PG Down Under!

Once again, I really enjoyed recording today’s show. It features Ryan Booz. Ryan is an evangelist with our friends at Red-Gate, focussing on PostgreSQL.

In this show, Ryan shares his experiences with community in relation to PostgreSQL. Next, we ventured into the challenges and benefits of being an application vendor working against PostgreSQL, and in particular, the extensibility model and how it compares to other products.

2024-07-25

SSIS: Reading pipe delimited text and selecting particular output columns

There was a question on the Q&A forums today, asking how to read data using SSIS, when it’s in this format:

|Col1| |Col2|Col3|Col|
|101| |A|21|DC|

One of the concerns was that there was a leading pipe. This is not a problem. When you have data like that, and you set | as the delimiter, because there are 6 delimiters, then there are 7 columns output. These are the values:

Column 1: blank string Column 2: 101 Column 3: blank string Column 4: A Column 5: 21 Column 6: DC Column 7: blank string

2024-07-19

Book Review: SQL Query Design Patterns and Best Practices

Another book that I read recently was SQL Query Design Patterns and Best Practices Book Cover by Steve Hughes, Dennis Neer, Dr Ram Babu Singh, Shabbir H Mala, Leslie Andrews, and Chi Zhang. It also came from our friends at PackT publishing.

Purpose

The intro to the book says “This book is for the SQL developer who is ready to take their query development skills to the next level. This includes report writers, data scientists, or similar data gatherers and allows users to expand their skills for complex querying and build more efficient and performant queries.

2024-06-11