During the Erin Stellato and Makena Barickman session the other day at SQLCon, there was a question asked. “Why don’t we upgrade SSMS?” There were people in the crowd still on SSMS 17. According to this post that was in 2017. I would like to say this was an outlier, but I honestly didn’t upgrade SSMS myself until recently.
Most of my work has always been in scripts, so SSMS was two things for me. a way to script objects, and a place to run queries. So once I had a version installed, I never really thought about it unless it stopped working for some reason. But when 21 came around… that changed… sort of. 64-bit was a huge draw because running out of RAM was all too common with the grid. Dark mode has meant I can see the screen so much b Now it is way harder to fill up RAM from the grid (and maybe impossible). Upgrading is always interesting, first because I usually have many windows to close, and section because it can be tricky with external tools, so I tend to wait a bit before diving in (and then forget)
But recently, there have been improvements to SSMS that are really exciting to upgrade for. Zooming into the grid for one, and another that just came out in the last couple of days is various save as options from the grid. So here on my laptop (that doesn’t have any extra tools installed since I mostly work from a VM in a cloud), I am upgrading to SSMS 22.
I also found out that SSMS will render markdown too, so I am going to test doing my final edits in there (maybe in a format that will be safe for saving for the future. More on that later.
Installing
After uninstalling SSMS 21, I do what I usually do, search for install SSMS and it takes me to the latest download page. Find download the installer, and it appears in my download folder. (Make sure you pick the download you just did with the latest suffix, or you may be installing something other than the latest.
If you haven’t already, it will install the Visual Studio Installer (which, it was noted, can be confusing if you don’t realize they share an installer.
Choose whatever you need, like SSIS for me (or you won’t be able to see the metadata as they now only install the things you need), and click install.
Then wait for the magic to happen (this magic will take a variable amount of time depending on whether you are on hotel, coffee shop, or you home gigabit internet (and a VPN as needed). All you have to do right now is wait, and treat your computer like it has a concussion (don’t let it go to sleep!)
Exporting grid results to different formats
To get started, I am just going to run the following:
SELECT name, database_id, create_date, compatibility_level, collation_nameFROM sys.databases;
The output in basic text is:
name database_id create_date compatibility_level collation_name----------------------- ----------- ----------------------- ------------------- --------------------------------master 1 2003-04-08 09:13:36.390 170 SQL_Latin1_General_CP1_CI_AStempdb 2 2026-03-19 19:55:57.210 170 SQL_Latin1_General_CP1_CI_ASmodel 3 2003-04-08 09:13:36.390 170 SQL_Latin1_General_CP1_CI_ASmsdb 4 2025-10-21 12:53:13.233 170 SQL_Latin1_General_CP1_CI_ASTestOptimizedLocking 5 2026-03-16 18:41:48.920 170 SQL_Latin1_General_CP1_CI_AS
(You can tell another blog I am working on :))
Output the data to a grid, and right click the grid, you will see “Save Results As…”:

I saved the file as all the new formats:
JSON
[ { "name": "master", "database_id": 1, "create_date": "2003-04-08 09:13:36.390", "compatibility_level": 170, "collation_name": "SQL_Latin1_General_CP1_CI_AS" }, { "name": "tempdb", "database_id": 2, "create_date": "2026-03-19 19:55:57.210", "compatibility_level": 170, "collation_name": "SQL_Latin1_General_CP1_CI_AS" }, { "name": "model", "database_id": 3, "create_date": "2003-04-08 09:13:36.390", "compatibility_level": 170, "collation_name": "SQL_Latin1_General_CP1_CI_AS" }, { "name": "msdb", "database_id": 4, "create_date": "2025-10-21 12:53:13.233", "compatibility_level": 170, "collation_name": "SQL_Latin1_General_CP1_CI_AS" }, { "name": "TestOptimizedLocking", "database_id": 5, "create_date": "2026-03-16 18:41:48.920", "compatibility_level": 170, "collation_name": "SQL_Latin1_General_CP1_CI_AS" }]
Markdown
|name|database\_id|create\_date|compatibility\_level|collation\_name||---|---|---|---|---||master|1|2003\-04\-08 09:13:36\.390|170|SQL\_Latin1\_General\_CP1\_CI\_AS||tempdb|2|2026\-03\-19 19:55:57\.210|170|SQL\_Latin1\_General\_CP1\_CI\_AS||model|3|2003\-04\-08 09:13:36\.390|170|SQL\_Latin1\_General\_CP1\_CI\_AS||msdb|4|2025\-10\-21 12:53:13\.233|170|SQL\_Latin1\_General\_CP1\_CI\_AS||TestOptimizedLocking|5|2026\-03\-16 18:41:48\.920|170|SQL\_Latin1\_General\_CP1\_CI\_AS|
That renders in markdown in WordPress as this (I didn’t do any extra formatting, this is how it was):
| name | database_id | create_date | compatibility_level | collation_name |
|---|---|---|---|---|
| master | 1 | 2003-04-08 09:13:36.390 | 170 | SQL_Latin1_General_CP1_CI_AS |
| tempdb | 2 | 2026-03-19 19:55:57.210 | 170 | SQL_Latin1_General_CP1_CI_AS |
| model | 3 | 2003-04-08 09:13:36.390 | 170 | SQL_Latin1_General_CP1_CI_AS |
| msdb | 4 | 2025-10-21 12:53:13.233 | 170 | SQL_Latin1_General_CP1_CI_AS |
| TestOptimizedLocking | 5 | 2026-03-16 18:41:48.920 | 170 | SQL_Latin1_General_CP1_CI_AS |
XML
<Data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <Row> <name>master</name> <database_id>1</database_id> <create_date>2003-04-08 09:13:36.390</create_date> <compatibility_level>170</compatibility_level> <collation_name>SQL_Latin1_General_CP1_CI_AS</collation_name> </Row> <Row> <name>tempdb</name> <database_id>2</database_id> <create_date>2026-03-19 19:55:57.210</create_date> <compatibility_level>170</compatibility_level> <collation_name>SQL_Latin1_General_CP1_CI_AS</collation_name> </Row> <Row> <name>model</name> <database_id>3</database_id> <create_date>2003-04-08 09:13:36.390</create_date> <compatibility_level>170</compatibility_level> <collation_name>SQL_Latin1_General_CP1_CI_AS</collation_name> </Row> <Row> <name>msdb</name> <database_id>4</database_id> <create_date>2025-10-21 12:53:13.233</create_date> <compatibility_level>170</compatibility_level> <collation_name>SQL_Latin1_General_CP1_CI_AS</collation_name> </Row> <Row> <name>TestOptimizedLocking</name> <database_id>5</database_id> <create_date>2026-03-16 18:41:48.920</create_date> <compatibility_level>170</compatibility_level> <collation_name>SQL_Latin1_General_CP1_CI_AS</collation_name> </Row></Data>
Excel

Note, that it doesn’t have column names. You control that using a setting in Tools\Options

Now if you export it, you get headers, all set to use for filters!

In conclusion
Keep up with updates to SSMS. While the core tools will work for years, in recent years the team has been doing great things.



Leave a Reply