SQLServerを完全アンインストールする

SSMSが起動しない不具合発生後に「プログラムと機能」からの削除と再起動を行った所再発したため、備忘録として

この記事は[Microsoft Japan SQL Server Support Teamのブログ](https://blogs.msdn.microsoft.com/jpsql/2013/05/30/sql-server-4/)を参考に、
手順をさらにスクリプト化した物となります。

## 1.「プログラムと機能」から削除

- コントロールパネルのアドレスバーに「コントロール パネル\プログラム\プログラムと機能」と入れると移動できる
- SQL Server関連の物を削除

## 2.「プログラムと機能」に「SQL」が含まれるプログラムがないか検索、あれば削除する

- 管理者権限PowerShellで実行

```powershell
Get-Item -Path "Registry::HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*"         | # レジストリからアンインストール可能な物を取得
  ForEach-Object {
   $dispname = (Get-Item -Path "Registry::$_").GetValue("DisplayName");
   if($dispname -ne $null -and $dispname.IndexOf("SQL") -gt -1){
     "[" + $dispname + "]`t" + (Get-Item -Path "Registry::$_").GetValue("UninstallString");
   }
  }                                                                                           | # SQLが含まれるプログラムのUninstallStringを取得
   Out-String -Stream                                                                         | # 文字列配列化
     ForEach-Object {$_.ToString().Trim() -replace ".*`t",""}                                 | # 各行のタブ文字以前を削除し、UninstallStringのみにする
       ForEach-Object {$_.ToString().Trim() -replace "MsiExec.exe \/X","MsiExec.exe /x """}   | # 各行をコマンドに変更①
         ForEach-Object {$_.ToString().Trim() -replace "MsiExec.exe \/I","MsiExec.exe /x """} | # 各行をコマンドに変更②
           ForEach-Object {$_.ToString().Trim() -replace "}","}"""}                           | # 各行をコマンドに変更③
             ForEach-Object {Invoke-Expression "${_}"}                                          # 各行を実行
```

## 3.GACから削除

- 管理者権限コマンドプロンプトで実行

```cmd
REM ======================= 
if exist "%windir%\assembly\GAC\*SQLServer*" del /s /q /f "%windir%\assembly\GAC\*SQLServer*" 
if exist "%windir%\assembly\GAC_32\*SQLServer*" del /s /q /f "%windir%\assembly\GAC_32\*SQLServer*" 
if exist "%windir%\assembly\GAC_64\*SQLServer*" del /s /q /f "%windir%\assembly\GAC_64\*SQLServer*" 
if exist "%windir%\assembly\GAC_MSIL\*SQLServer*" del /s /q /f "%windir%\assembly\GAC_MSIL\*SQLServer*" 
REM =======================
```

## 4.レジストリキーを削除

- 管理者権限コマンドプロンプトで実行
- 名称にMSSQL又はSQL Serverが含まれるレジストリキーを削除

```cmd
for /f "delims= usebackq" %i in (`reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft" ^| findstr /C:"MSSQL" /C:"SQL Server"`) do (reg delete "%i" /f)
```

## 5.SQLServer関連のフォルダの削除

- 管理者権限コマンドプロンプトで実行

```cmd
REM =======================
if exist "%USERPROFILE%\Local Settings\Application Data\Microsoft\Microsoft SQL Server" rmdir /S /Q "%USERPROFILE%\Local Settings\Application Data\Microsoft\Microsoft SQL Server"
if exist "%USERPROFILE%\Application Data\Microsoft\Microsoft SQL Server" rmdir /S /Q "%USERPROFILE%\Application Data\Microsoft\Microsoft SQL Server"
if exist "%USERPROFILE%\All Users\Application Data\Microsoft\Microsoft SQL Server" rmdir /S /Q "%USERPROFILE%\All Users\Application Data\Microsoft\Microsoft SQL Server"
if exist "%ProgramFiles%\Microsoft SQL Server" rmdir /S /Q "%ProgramFiles%\Microsoft SQL Server"
if exist "%ProgramFiles(x86)%\Microsoft SQL Server" rmdir /S /Q "%ProgramFiles(x86)%\Microsoft SQL Server"
REM =======================
```

## 6.TEMP内のリソース削除

- 管理者権限コマンドプロンプトで実行
- 使用中で削除できなかった物は無視で良い

```cmd
del %TEMP%\* /S /Q
del %systemroot%\temp\* /S /Q
```

## 91.インストールディレクトリや共有機能ディレクトリを変更した場合は、自分で削除

## 99.OS再起動