Azure-Sql-Db

T-SQL 101: 102 What is a Primary Key ?

In the previous post, we saw how CROSS JOIN operations work. Now it’s rare for us to want to have every combination of the rows in each table.

What we usually end up joining on are primary keys and foreign keys. So we should start by defining what primary keys are.

The primary key of a table is a value or combination of values that uniquely identifies a particular row in a table. If we need to refer to a row in a table, and ensure that we’re only talking about one row, it’s how we do that. So how do we identify that one row exactly?

2025-01-29

T-SQL 101: 101 Using CROSS JOIN

The simplest way to join two tables is what’s called a cross-join. So this is where I say from products, cross-join, sales territories.

SELECT *
FROM dbo.Products
CROSS JOIN dbo.SalesTerritories;

Now what that will do though is it will give me every combination of rows from the two tables. So I’ll get one row from the second table for each row in the first table. This is often called a Cartesian product of the two tables and it can quickly end up generating a very large number of rows.

2025-01-28

T-SQL 101: 100 Creating loops in T-SQL with WHILE

Most programming languages have some way of forming loops. Now some of them have a variety. For example, a language like Basic or Excel had a For Next loop, a Do While loop, a While Until loop, etc.

In T-SQL, while you could conceivably construct loops manually by using a GOTO statement, no-one does that and it would be considered a bad idea.

Instead, we form all the loops we need by using a WHILE statement. It can be used to create all the variety of loops mentioned above.

2025-01-27

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

SQL Down Under show 90 with guest Joe Sack discussing Azure SQL Database and Copilot is now published!

Joe Sack is an old friend. (I’ve known him a long time. He’s not actually old). He’s always fascinating to chat to and so I was so pleased to have him on another SQL Down Under podcast today. Last time was in 2017.

Joe is a Senior Product Manager at Microsoft and is working with the integration of data and AI with SQL Copilots. The aim is to use AI and natural language processing to make database management simpler, whether you’ve been doing it for years or just getting started. The experiences he discusses in the show include Azure Copilot integration and Natural language to SQL.

2024-04-27