Install SQL Server cumulative updates silently

Installing SQL Server cumulative updates is always a cumbersome, and quite daunting task. Unpacking and running the CU installer is a slow process, you have to click through a lot of screens, and it's hard to get it to install silently. But here is how!
Published on Wednesday, 13 October 2021

Imagine you're installing Cumulative Update Package 13 for SQL Server 2019, or KB5005679. What you need to know is the file you downloaded (SQLServer2019-KB5005679-x64.exe) is a wrapper around the update's setup.exe program. So any setup parameter passed on the command line, isn't passed on to setup.exe! Therefore, the first step is to unpack the file into a temporary location from where you run the setup.

The following command unpacks SQLServer2019-KB5005679-x64.exe into the location Z:\sqlserver_cu\KB5005679:

.\SQLServer2019-KB5005679-x64.exe /X:Z:\sqlserver_cu\KB5005679

In the KB5005679 folder you'll find the SQL Server cumulative update file setup.exe you so desperately need to install this update silently. Now only for the command line arguments...

Manually failover all databases in an SQL Server Database Mirroring configuration

All relevant command line arguments are in Microsofts online doc Installing Updates from the Command Prompt. For me, the minimal set I go with are:

  • /action=patch
  • /instancename=MSSQLSERVER
  • /quiet
  • /IAcceptSQLServerLicenseTerms

The /quiet switch runs the update in unattended mode, making the command to install SQL Server cumulative updates silent and unattended:

# silent and unattended install of a service pack to a specific SQL Server instance
Z:\sqlserver_cu\KB5005679\setup.exe /action=patch /instancename=MSSQLSERVER /quiet /IAcceptSQLServerLicenseTerms

Install Windows Server Servicing Stack Updates (SSU) using PowerShell

In your deployment scenario, you can add some logic and checks to apply the update only if its ProductVersion property is higher than currently installed. You'll need Invoke-SqlCmd for this too:

$sqlserver_version = New-Object System.Version $(Invoke-SqlCmd -Query "SELECT SERVERPROPERTY('ProductVersion') AS BuildNumber").BuildNumber
if($sqlserver_version -ne (New-Object System.Version $(Get-ItemProperty "Z:\sqlserver_cu\KB5005679\setup.exe\setup.exe").VersionInfo.ProductVersion)) {
	Z:\sqlserver_cu\KB5005679\setup.exe /action=patch /instancename=MSSQLSERVER /quiet /IAcceptSQLServerLicenseTerms
}

Microsoft SQL Server Versions List

An unofficial build chart lists all of the known Service Packs (SP), Cumulative Updates (CU), patches, hotfixes and other builds of MS SQL Server 2022, 2019, 2017, 2016, 2014, 2012, 2008 R2, 2008, 2005, 2000, 7.0, 6.5 and 6.0 that have been released can be found on https://sqlserverbuilds.blogspot.com/. Microsoft maintains "Latest updates and version history for SQL Server" on https://learn.microsoft.com/en-us/troubleshoot/sql/releases/download-and-install-latest-updates and you can download the most recent CU from https://www.microsoft.com/en-us/download/details.aspx?id=100809.