How to get SqlServerBuilds data programmatically?
All SQL Server builds are available in a public Google Sheet here:
https://docs.google.com/spreadsheets/d/16Ymdz80xlCzb6CwRFVokwo0onkofVYFoSkc7mYe6pgw/viewGoogle Sheet can be downloaded in these formats:
It can also be downloaded using a program via API:
Example 1: All SQL Server builds
Example 2: RTM + all Cumulative Updates for SQL Server
Example 3: All supported SQL Server releases
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:
- Google Visualization API Query Language
- Implementing the Chart Tools Datasource Protocol › Response Format
© 2007–2024 SqlServerVersions.com · Contact · Disclaimer · Privacy policy