How to get SqlServerBuilds data programmatically?

After 12 years on SqlServerBuilds.blogspot.com, it has been moved here to www.SqlServerVersions.com. The old address will be redirected automatically.

All SQL Server builds are available in a public Google Sheet here:

https://docs.google.com/spreadsheets/d/16Ymdz80xlCzb6CwRFVokwo0onkofVYFoSkc7mYe6pgw/view

Google Sheet can be downloaded in these formats:


It can also be downloaded using a program via API:

Using Microsoft PowerShell / curl / wget:

Example 1: All SQL Server builds
Example 2: RTM + all Cumulative Updates for SQL Server
Example 3: All supported SQL Server releases
Using T-SQL:

Example 4: All SQL Server builds
Example 5: All SQL Server releases
Known error messages (PowerShell):

The response content cannot be parsed because the Internet Explorer engine is not available, or Internet Explorer's first-launch configuration is not complete.

Example 1: All SQL Server 2017 builds (PowerShell / curl / wget)

File Download.ps1:

Add-Type -Assembly System.Web # [System.Web.HttpUtility]::UrlEncode() needs this

$SqlVersion = "2017"
$Query = "select * where A='" + $SqlVersion + "'"
$URL   = "https://docs.google.com/spreadsheets/d/16Ymdz80xlCzb6CwRFVokwo0onkofVYFoSkc7mYe6pgw/gviz/tq?tq=" `
       + [System.Web.HttpUtility]::UrlEncode($Query) `
       + "&tqx=out:csv"

Invoke-WebRequest $URL -OutFile "C:\Temp\SqlServerBuilds.csv"

Run:

PowerShell.exe -ExecutionPolicy Unrestricted .\Download.ps1

Typical result – content of the file SqlServerBuilds.csv:

"SQLServer","Version","Build","FileVersion","Description","Link","ReleaseDate","SP","CU","HF","RTM","CTP","New"
"2017","14","14.0.3238.1","2017.140.3238.1","Cumulative update 17 (CU17) for SQL Server 2017","https://support.microsoft.com/en-us/help/4515579","2019-10-08","","TRUE","","","",""
"2017","14","14.0.3223.3","2017.140.3223.3","Cumulative update 16 (CU16) for SQL Server 2017","https://support.microsoft.com/en-us/help/4508218","2019-08-01","","TRUE","","","",""
"2017","14","14.0.3208.1","2017.140.3208.1","On-demand hotfix update package 2 for SQL Server 2017 Cumulative update 15 (CU15)","https://support.microsoft.com/en-us/help/4510083","2019-07-09","","","TRUE","","",""
"2017","14","14.0.3192.2","2017.140.3192.2","Security update for SQL Server 2017 CU15 GDR: July 9, 2019","https://support.microsoft.com/en-us/help/4505225","2019-07-09","","","","","",""
"2017","14","14.0.3164.1","2017.140.3164.1","On-demand hotfix update package for SQL Server 2017 Cumulative update 15 (CU15)","https://support.microsoft.com/en-us/help/4506633","2019-06-20","","","TRUE","","",""
"2017","14","14.0.3162.1","2017.140.3162.1","Cumulative update 15 (CU15) for SQL Server 2017","https://support.microsoft.com/en-us/help/4498951","2019-05-24","","TRUE","","","",""
"2017","14","14.0.3103.1","2017.140.3103.1","Security update for SQL Server 2017 Cumulative update 14 (CU14): May 14, 2019","https://support.microsoft.com/en-us/help/4494352","2019-05-14","","","","","",""
"2017","14","14.0.3076.1","2017.140.3076.1","Cumulative update 14 (CU14) for SQL Server 2017","https://support.microsoft.com/en-us/help/4484710","2019-03-25","","TRUE","","","",""
"2017","14","14.0.3049.1","2017.140.3049.1","On-demand hotfix update package for SQL Server 2017 Cumulative update 13 (CU13)","https://support.microsoft.com/en-us/help/4483666","2019-01-08","","","TRUE","","",""
"2017","14","14.0.3048.4","2017.140.3048.4","Cumulative update 13 (CU13) for SQL Server 2017","https://support.microsoft.com/en-us/help/4466404","2018-12-18","","TRUE","","","",""
...


The same can be achieved with a "one-liner" using the curl utility, which is included with Windows 10 and higher – file Download.cmd:

curl https://docs.google.com/spreadsheets/d/16Ymdz80xlCzb6CwRFVokwo0onkofVYFoSkc7mYe6pgw/gviz/tq?tq=select+*+where+A='2017'^&tqx=out:csv -o "C:\Temp\SqlServerBuilds.csv"

Or using the wget utility – file Download.cmd:

wget https://docs.google.com/spreadsheets/d/16Ymdz80xlCzb6CwRFVokwo0onkofVYFoSkc7mYe6pgw/gviz/tq?tq=select+*+where+A='2017'^&tqx=out:csv -O "C:\Temp\SqlServerBuilds.csv"

Example 2: RTM + all Cumulative Updates (CUs) for SQL Server 2017 (PowerShell)

File Download.ps1:

Add-Type -Assembly System.Web # [System.Web.HttpUtility]::UrlEncode() needs this

$Query = "select C,E,F,G where A='2017' and (I=TRUE or K=TRUE)"
$URL   = "https://docs.google.com/spreadsheets/d/16Ymdz80xlCzb6CwRFVokwo0onkofVYFoSkc7mYe6pgw/gviz/tq?tq=" `
       + [System.Web.HttpUtility]::UrlEncode($Query) `
       + "&tqx=out:csv"

Invoke-WebRequest $URL -OutFile "C:\Temp\SqlServerBuilds.csv"

Run:

PowerShell.exe -ExecutionPolicy Unrestricted .\Download.ps1

Typical result – content of the file SqlServerBuilds.csv:

"Build","Description","Link","ReleaseDate"
"14.0.3238.1","Cumulative update 17 (CU17) for SQL Server 2017","https://support.microsoft.com/en-us/help/4515579","2019-10-08"
"14.0.3223.3","Cumulative update 16 (CU16) for SQL Server 2017","https://support.microsoft.com/en-us/help/4508218","2019-08-01"
"14.0.3162.1","Cumulative update 15 (CU15) for SQL Server 2017","https://support.microsoft.com/en-us/help/4498951","2019-05-24"
"14.0.3076.1","Cumulative update 14 (CU14) for SQL Server 2017","https://support.microsoft.com/en-us/help/4484710","2019-03-25"
"14.0.3048.4","Cumulative update 13 (CU13) for SQL Server 2017","https://support.microsoft.com/en-us/help/4466404","2018-12-18"
"14.0.3045.24","Cumulative update 12 (CU12) for SQL Server 2017","https://support.microsoft.com/en-us/help/4464082","2018-10-24"
"14.0.3038.14","Cumulative update 11 (CU11) for SQL Server 2017","https://support.microsoft.com/en-us/help/4462262","2018-09-21"
"14.0.3037.1","Cumulative update 10 (CU10) for SQL Server 2017","https://support.microsoft.com/en-us/help/4342123","2018-08-27"
"14.0.3030.27","Cumulative update 9 (CU9) for SQL Server 2017","https://support.microsoft.com/en-us/help/4341265","2018-07-18"
"14.0.3029.16","Cumulative update 8 (CU8) for SQL Server 2017","https://support.microsoft.com/en-us/help/4338363","2018-06-21"
"14.0.3026.27","Cumulative update 7 (CU7) for SQL Server 2017","https://support.microsoft.com/en-us/help/4229789","2018-05-23"
"14.0.3025.34","Cumulative update 6 (CU6) for SQL Server 2017","https://support.microsoft.com/en-us/help/4101464","2018-04-19"
"14.0.3023.8","Cumulative update 5 (CU5) for SQL Server 2017","https://support.microsoft.com/en-us/help/4092643","2018-03-20"
"14.0.3022.28","Cumulative update 4 (CU4) for SQL Server 2017","https://support.microsoft.com/en-us/help/4056498","2018-02-17"
"14.0.3015.40","Cumulative update 3 (CU3) for SQL Server 2017","https://support.microsoft.com/en-us/help/4052987","2018-01-04"
"14.0.3008.27","Cumulative update 2 (CU2) for SQL Server 2017","https://support.microsoft.com/en-us/help/4052574","2017-11-28"
"14.0.3006.16","Cumulative update 1 (CU1) for SQL Server 2017","https://support.microsoft.com/en-us/help/4038634","2017-10-23"
"14.0.1000.169","Microsoft SQL Server 2017 RTM","https://www.microsoft.com/en-us/sql-server/sql-server-downloads","2017-10-02"

Example 3: All supported SQL Server releases (PowerShell)

File Download.ps1:

Add-Type -Assembly System.Web # [System.Web.HttpUtility]::UrlEncode() needs this

$Query = "select * where J<>TRUE"
$URL   = "https://docs.google.com/spreadsheets/d/16Ymdz80xlCzb6CwRFVokwo0onkofVYFoSkc7mYe6pgw/gviz/tq?gid=1648964847&tq=" `
       + [System.Web.HttpUtility]::UrlEncode($Query) `
       + "&tqx=out:csv"

Invoke-WebRequest $URL -OutFile "C:\Temp\SqlServerReleases.csv"

Run:

PowerShell.exe -ExecutionPolicy Unrestricted .\Download.ps1

Typical result – content of the file SqlServerReleases.csv:

"Release","FullName","Version","DatabaseCompatibilityLevel","InternalDatabaseVersion","ReleaseDate","MainstreamSupportEnds","ExtendedSupportEnds","IsLatest","IsObsolete","IsBeta"
"2019","SQL Server 2019","15.0","150","904","2019-11-04","2025-01-07","2030-01-08","TRUE","",""
"2017","SQL Server 2017","14.0","140","869","2017-10-02","2022-10-11","2027-10-12","","",""
"2016","SQL Server 2016","13.0","130","852","2016-06-01","2021-07-13","2026-07-14","","",""
"2014","SQL Server 2014","12.0","120","782","2014-04-01","2019-07-09","2024-07-09","","",""
"2012","SQL Server 2012","11.0","110","706","2012-03-06","2017-07-11","2022-07-12","","",""

Example 4: All SQL Server builds (T-SQL)

Prerequisite:

-- First you need to have the "Ole Automation Procedures" configuration enabled on SQL Server.
-- Please note that this is not recommended on the production server!
EXEC sp_configure N'show advanced options', 1;
RECONFIGURE;

EXEC sp_configure N'Ole Automation Procedures', 1;
RECONFIGURE;

T-SQL script:

-- Warning: too many web requests may be limited by Google Docs! Use wisely.
SET NOCOUNT ON;
DECLARE @Url NVARCHAR(2048) = N'https://docs.google.com/spreadsheets/d/16Ymdz80xlCzb6CwRFVokwo0onkofVYFoSkc7mYe6pgw/gviz/tq?tqx=out:json';
DECLARE @obj INT, @hr INT, @status INT;
DECLARE @Response TABLE(ResponseText NVARCHAR(MAX) NULL);

EXEC @hr = sp_OACreate 'MSXML2.XMLHTTP', @obj OUT;
IF ISNULL(@hr, 0) <> 0       THROW 50000, 'sp_OACreate error', 0;
IF @obj IS NULL              THROW 50000, 'sp_OACreate error', 1;

EXEC @hr = sp_OAMethod @obj, 'open', NULL, 'GET', @Url, False;
IF ISNULL(@hr, 0) <> 0       THROW 50000, 'sp_OAMethod open() error', 0;

EXEC @hr = sp_OAMethod @obj, 'send';
IF ISNULL(@hr, 0) <> 0       THROW 50000, 'sp_OAMethod send() error', 0;

EXEC @hr = sp_OAGetProperty @obj, 'status', @status OUT;
IF ISNULL(@hr, 0)     <>   0 THROW 50000, 'sp_OAGetProperty status error', 0;
IF ISNULL(@status, 0) <> 200 THROW 50000, 'sp_OAGetProperty status error', 1;

INSERT INTO @Response(ResponseText)
EXEC @hr = sp_OAGetProperty @obj, 'responseText';
IF ISNULL(@hr, 0) <> 0       THROW 50000, 'sp_OAGetProperty responseText error', 0;

EXEC @hr = sp_OADestroy @obj;
IF ISNULL(@hr, 0) <> 0       THROW 50000, 'sp_OADestroy error', 0;

DECLARE @JsonP NVARCHAR(MAX) = (SELECT ResponseText FROM @Response);
IF ISNULL(@JsonP, N'') = N'' THROW 50000, 'Empty response', 0;

-- Now we have JSON-P and we need to clear the text at the beginning '/*O_o*/<NewLine>google.visualization.Query.setResponse(' and end ');'.
DECLARE @Json NVARCHAR(MAX) = SUBSTRING(@JsonP, 48, DATALENGTH(@JsonP) - 48 - 1);

-- Transform JSON into a table-like dataset
SELECT *
FROM OPENJSON(@Json, '$.table.rows')
WITH (
  SQLServer   NVARCHAR(MAX) '$.c[0].v',
  Version     NVARCHAR(MAX) '$.c[1].v',
  Build       NVARCHAR(MAX) '$.c[2].v',
  FileVersion NVARCHAR(MAX) '$.c[3].v',
  Description NVARCHAR(MAX) '$.c[4].v',
  Link        NVARCHAR(MAX) '$.c[5].v',
  ReleaseDate DATE          '$.c[6].f',
  SP          BIT           '$.c[7].v',
  CU          BIT           '$.c[8].v',
  HF          BIT           '$.c[9].v',
  RTM         BIT           '$.c[10].v',
  CTP         BIT           '$.c[11].v',
  New         BIT           '$.c[12].v',
  Withdrawn   BIT           '$.c[13].v'
);

Typical result:

SQLServer Version Build        FileVersion      Description                                               Link                                                       ReleaseDate SP   CU   HF   RTM  CTP  New  Withdrawn
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2019      15.0    15.0.4178.1  2019.150.4178.1  Cumulative update 13 (CU13) for SQL Server 2019           https://support.microsoft.com/en-us/help/5005679           2021-10-05  NULL 1    NULL NULL NULL 1    NULL
2019      15.0    15.0.4153.1  2019.150.4153.1  Cumulative update 12 (CU12) for SQL Server 2019           https://support.microsoft.com/en-us/help/5004524           2021-08-04  NULL 1    NULL NULL NULL NULL NULL
2019      15.0    15.0.4138.2  2019.150.4138.2  Cumulative update 11 (CU11) for SQL Server 2019           https://support.microsoft.com/en-us/help/5003249           2021-06-10  NULL 1    NULL NULL NULL NULL NULL
2019      15.0    15.0.4123.1  2019.150.4123.1  Cumulative update 10 (CU10) for SQL Server 2019           https://support.microsoft.com/en-us/help/5001090           2021-04-06  NULL 1    NULL NULL NULL NULL NULL
2019      15.0    15.0.4102.2  2019.150.4102.2  Cumulative update 9 (CU9) for SQL Server 2019             https://support.microsoft.com/en-us/help/5000642           2021-02-11  NULL 1    NULL NULL NULL NULL NULL
2019      15.0    15.0.4083.2  2019.150.4083.2  Security update for SQL Server 2019 CU8: January 12, 2021 https://support.microsoft.com/en-us/help/4583459           2021-01-12  NULL NULL NULL NULL NULL NULL NULL
2019      15.0    15.0.4073.23 2019.150.4073.23 Cumulative update 8 (CU8) for SQL Server 2019             https://support.microsoft.com/en-us/help/4577194           2020-10-01  NULL 1    NULL NULL NULL NULL NULL
2019      15.0    15.0.4063.15 2019.150.4063.15 Cumulative update 7 (CU7) for SQL Server 2019             https://support.microsoft.com/en-us/help/4570012           2020-09-02  NULL 1    NULL NULL NULL NULL 1
2019      15.0    15.0.4053.23 2019.150.4053.23 Cumulative update 6 (CU6) for SQL Server 2019             https://support.microsoft.com/en-us/help/4563110           2020-08-04  NULL 1    NULL NULL NULL NULL NULL
2019      15.0    15.0.4043.16 2019.150.4043.16 Cumulative update 5 (CU5) for SQL Server 2019             https://support.microsoft.com/en-us/help/4552255           2020-06-22  NULL 1    NULL NULL NULL NULL NULL
2019      15.0    15.0.4033.1  2019.150.4033.1  Cumulative update 4 (CU4) for SQL Server 2019             https://support.microsoft.com/en-us/help/4548597           2020-03-31  NULL 1    NULL NULL NULL NULL NULL
2019      15.0    15.0.4023.6  2019.150.4023.6  Cumulative update 3 (CU3) for SQL Server 2019             https://support.microsoft.com/en-us/help/4538853           2020-03-12  NULL 1    NULL NULL NULL NULL NULL
2019      15.0    15.0.4013.40 2019.150.4013.40 Cumulative update 2 (CU2) for SQL Server 2019             https://support.microsoft.com/en-us/help/4536075           2020-02-13  NULL 1    NULL NULL NULL NULL 1
2019      15.0    15.0.4003.23 2019.150.4003.23 Cumulative update 1 (CU1) for SQL Server 2019             https://support.microsoft.com/en-us/help/4527376           2020-01-07  NULL 1    NULL NULL NULL NULL NULL
2019      15.0    15.0.2080.9  2019.150.2080.9  Security update for SQL Server 2019 GDR: January 12, 2021 https://support.microsoft.com/en-us/help/4583458           2021-01-12  NULL NULL NULL NULL NULL NULL NULL
2019      15.0    15.0.2070.41 2019.150.2070.41 Servicing Update (GDR1) for SQL Server 2019 RTM           https://support.microsoft.com/en-us/help/4517790           2019-11-04  NULL NULL NULL NULL NULL NULL NULL
2019      15.0    15.0.2000.5  2019.150.2000.5  Microsoft SQL Server 2019 RTM                             https://www.microsoft.com/en-us/sql-server/sql-server-2019 2019-11-04  NULL NULL NULL 1    NULL NULL NULL
...

Example 5: All SQL Server releases (T-SQL)

Prerequisite:

-- First you need to have the "Ole Automation Procedures" configuration enabled on SQL Server.
-- Please note that this is not recommended on the production server!
EXEC sp_configure N'show advanced options', 1;
RECONFIGURE;

EXEC sp_configure N'Ole Automation Procedures', 1;
RECONFIGURE;

T-SQL script:

-- Warning: too many web requests may be limited by Google Docs! Use wisely.
SET NOCOUNT ON;
DECLARE @Url NVARCHAR(2048) = N'https://docs.google.com/spreadsheets/d/16Ymdz80xlCzb6CwRFVokwo0onkofVYFoSkc7mYe6pgw/gviz/tq?gid=1648964847&tqx=out:json';
DECLARE @obj INT, @hr INT, @status INT;
DECLARE @Response TABLE(ResponseText NVARCHAR(MAX) NULL);

EXEC @hr = sp_OACreate 'MSXML2.XMLHTTP', @obj OUT;
IF ISNULL(@hr, 0) <> 0       THROW 50000, 'sp_OACreate error', 0;
IF @obj IS NULL              THROW 50000, 'sp_OACreate error', 1;

EXEC @hr = sp_OAMethod @obj, 'open', NULL, 'GET', @Url, False;
IF ISNULL(@hr, 0) <> 0       THROW 50000, 'sp_OAMethod open() error', 0;

EXEC @hr = sp_OAMethod @obj, 'send';
IF ISNULL(@hr, 0) <> 0       THROW 50000, 'sp_OAMethod send() error', 0;

EXEC @hr = sp_OAGetProperty @obj, 'status', @status OUT;
IF ISNULL(@hr, 0)     <>   0 THROW 50000, 'sp_OAGetProperty status error', 0;
IF ISNULL(@status, 0) <> 200 THROW 50000, 'sp_OAGetProperty status error', 1;

INSERT INTO @Response(ResponseText)
EXEC @hr = sp_OAGetProperty @obj, 'responseText';
IF ISNULL(@hr, 0) <> 0       THROW 50000, 'sp_OAGetProperty responseText error', 0;

EXEC @hr = sp_OADestroy @obj;
IF ISNULL(@hr, 0) <> 0       THROW 50000, 'sp_OADestroy error', 0;

DECLARE @JsonP NVARCHAR(MAX) = (SELECT ResponseText FROM @Response);
IF ISNULL(@JsonP, N'') = N'' THROW 50000, 'Empty response', 0;

-- Now we have JSON-P and we need to clear the text at the beginning '/*O_o*/<NewLine>google.visualization.Query.setResponse(' and end ');'.
DECLARE @Json NVARCHAR(MAX) = SUBSTRING(@JsonP, 48, DATALENGTH(@JsonP) - 48 - 1);

-- Transform JSON into a table-like dataset
SELECT *
FROM OPENJSON(@Json, '$.table.rows')
WITH (
  Release                    NVARCHAR(MAX) '$.c[0].v',
  FullName                   NVARCHAR(MAX) '$.c[1].v',
  Version                    NVARCHAR(MAX) '$.c[2].v',
  DatabaseCompatibilityLevel NVARCHAR(MAX) '$.c[3].f',
  InternalDatabaseVersion    NVARCHAR(MAX) '$.c[4].f',
  ReleaseDate                DATE          '$.c[5].f',
  MainstreamSupportEnds      DATE          '$.c[6].f',
  ExtendedSupportEnds        DATE          '$.c[7].f',
  IsLatest                   BIT           '$.c[8].v',
  IsObsolete                 BIT           '$.c[9].v',
  IsBeta                     BIT           '$.c[10].v'
);

Typical result:

Release FullName           Version DatabaseCompatibilityLevel InternalDatabaseVersion    ReleaseDate MainstreamSupportEnds ExtendedSupportEnds IsLatest IsObsolete IsBeta
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2022    SQL Server 2022    16.0    160                        NULL                       NULL        NULL                  NULL                NULL     NULL       1
2019    SQL Server 2019    15.0    150                        904                        2019-11-04  2025-01-07            2030-01-08          1        NULL       NULL
2017    SQL Server 2017    14.0    140                        869                        2017-10-02  2022-10-11            2027-10-12          NULL     NULL       NULL
2016    SQL Server 2016    13.0    130                        852                        2016-06-01  2021-07-13            2026-07-14          NULL     NULL       NULL
2014    SQL Server 2014    12.0    120                        782                        2014-04-01  2019-07-09            2024-07-09          NULL     NULL       NULL
2012    SQL Server 2012    11.0    110                        706                        2012-03-06  2017-07-11            2022-07-12          NULL     NULL       NULL
2008 R2 SQL Server 2008 R2 10.50   100                        660                        2010-04-21  2014-07-08            2019-07-09          NULL     1          NULL
2008    SQL Server 2008    10.0    100                        655                        2008-08-07  2014-07-08            2019-07-09          NULL     1          NULL
2005    SQL Server 2005    9.0     90                         611                        2005-11-07  2011-04-12            2016-04-12          NULL     1          NULL
2000    SQL Server 2000    8.0     80                         539                        2000-11-30  2008-04-08            2013-04-09          NULL     1          NULL
7.0     SQL Server 7.0     7.0     70                         515                        1998-11-27  2005-12-31            2011-01-11          NULL     1          NULL
6.5     SQL Server 6.5     6.5     60                         408                        1996-06-30  2002-01-01            NULL                NULL     1          NULL
6.0     SQL Server 6.0     6.0     60                         406                        1995-06-13  1999-03-31            NULL                NULL     1          NULL

Known error messages (PowerShell)

The response content cannot be parsed because the Internet Explorer engine is not available, or Internet Explorer's first-launch configuration is not complete.

On older versions of PowerShell (< 6.0), you need to use the -UseBasicParsing parameter:

Invoke-WebRequest $URL -UseBasicParsing -OutFile "C:\Temp\SqlServerBuilds.csv"

Based on:

 

 

© 2007–2022 SqlServerVersions.com · Contact · Disclaimer · Privacy policy