💻

SqllocalDB vコマンドでバージョンが表示されないときの対応

2024/09/26に公開

ローカルにインストールされているSQL Server Express LocalDB(以下LocalDB)のバージョン一覧を取得するためにSqlLocalDB vコマンドを叩いた際に、Windows APIのエラーが返却される場合があった。
この事象の原因と対応方法について調べたところ、Stack Overflowにそのままの質疑応答があった。

https://stackoverflow.com/questions/56760683/windows-api-call-reggetvaluew-returned-error-code-0

但し日本語では検索で情報が出てこなかったのでメモを残す。

事象

インストールされているLocalDBのバージョン一覧を得るために以下のコマンドを実行する

> SqlLocalDB versions

しかし、以下のエラーが表示される。

Windows API の呼び出し "RegGetValueW" はエラー コードを返しました: 0。

原因

これは、レジストに登録されている情報にアンマッチが発生しているために発生している。
具体的には以下の二つのエントリを指す。

  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server Local DB\Installed Versions
  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server

自分のマシンで発生していた例では以下のようになっていた。

  • HKLM\SOFTWARE\Microsoft\Microsoft SQL Server Local DB\Installed Versions13.0
  • これに対応するHKLM\SOFTWARE\Microsoft\Microsoft SQL Serve\MSSQL13E.LOCALDB\MSSQMServer\CurrentVersion\CurrentVersion13.1

他にも自分が見た事例では、13.0と13.1または13.2で不一致になっているケースが散見された。エントリがこのようになる原因については今回調査していないが、恐らくはSQL Server Express 2016 LocalDBのサービスパックを適用するとインプレースでアップグレードされHKLM\SOFTWARE\Microsoft\Microsoft SQL Serveは以下のバージョンが更新されるために発生していると推測する。

対処方法

対処法①:SP3にする

Microsoft® SQL Server® 2016 Service Pack 3 Expressではこの事象に対処されているため、SP3を適用すれば解消する。
SP3を適用(実質的にアンインストール→インストール)すると、バージョンはMicrosoft SQL Server 2016 (13.0.6300.2)となり、13.0となる為レジストにアンマッチが発生せず従ってエラーも発生しなくなる。

SQL Server® 2016 Service Pack 3 Express LocalDBは https://www.microsoft.com/ja-jp/download/details.aspx?id=103447 からSQLServer2016-SSEI-Expr.exeをダウンロードし実行、メニューから「メディアのダウンロード」-「LocalDB」と進み、ダウンロードされたSqlLocalDB.msiを実行することでインストール(インプレースアップグレード)可能。

対処法②:前述のレジストリのエントリを修正し、マッチさせれば事象は解消する。

事情によりSP3が適用できない場合はレジストリ値を修正することでも対応が可能。

HKLM\SOFTWARE\Microsoft\Microsoft SQL Server Local DB\Installed Versions側のエントリでバージョンの2番目の項(minor version?)を以下のように一致させる。

備考・注意点

SqlLocalDB createコマンドでLocalDBのインスタンス作成時にバージョンを指定する際はHKLM\SOFTWARE\Microsoft\Microsoft SQL Server Local DB\Installed Versionsで指定する必要がある。

参考

https://support.microsoft.com/ja-jp/topic/kb5005687-修正-2016-sp1-sp2-がインストールされている場合-sqllocaldb-exe-バージョン-がコンピューターにインストールされている-localdb-のバージョンの一覧をsql-localdb停止する-391215c9-3a4f-41f7-a3ee-da1246f475c0

Discussion