# 通知設計書 115-バージョン情報取得

## 概要

本ドキュメントは、sp_Blitzストアドプロシージャにおいて、SQL Serverのバージョン情報を取得する処理の開始を通知するデバッグメッセージの設計を定義します。

### 本通知の処理概要

sp_Blitz実行時に、SERVERPROPERTY('ProductVersion')を使用してSQL Serverのメジャーバージョン番号とマイナービルド番号を取得する処理の開始をデバッグメッセージとして通知します。

**業務上の目的・背景**：sp_Blitzは、SQL Serverの様々なバージョンで動作するよう設計されていますが、一部のチェック項目はバージョン固有の機能に依存しています。バージョン情報を取得することで、バージョン固有のチェック項目の有効/無効を制御し、互換性エラーを防ぎます。この通知は、デバッグモードにおいてバージョン情報取得処理が開始されたことをDBAに伝え、バージョン依存の動作を理解する助けとなります。

**通知の送信タイミング**：sp_Blitz実行の初期化フェーズで、出力パラメータの設定後に送信されます。これはDBCC DBINFO抽出処理の前段階です。

**通知の受信者**：sp_Blitzを@Debug = 1または@Debug = 2で実行しているデータベース管理者がSSMS（SQL Server Management Studio）のメッセージタブで受信します。

**通知内容の概要**：「Getting version information.」というメッセージで、バージョン情報取得処理が開始されたことを伝えます。

**期待されるアクション**：デバッグ目的の通知であり、通常は特別なアクションは不要です。バージョン依存の機能が期待通りに動作しない場合、この通知とその後のバージョン変数の値を確認することで原因特定に役立ちます。

## 通知種別

コンソール出力（RAISERROR WITH NOWAIT）- デバッグモード専用

## 送信仕様

### 基本情報

| 項目 | 内容 |
|-----|------|
| 送信方式 | 同期（RAISERROR WITH NOWAIT） |
| 優先度 | 低（デバッグ情報） |
| リトライ | なし |

### 送信先決定ロジック

sp_Blitzを@Debug IN (1, 2)で実行しているクライアントセッションに対して、RAISERRORによるメッセージ出力として送信されます。@Debug = 0の場合、このメッセージは出力されません。

## 通知テンプレート

### コンソール出力の場合

| 項目 | 内容 |
|-----|------|
| メッセージ形式 | RAISERROR |
| 重大度 | 0（情報メッセージ） |
| 状態 | 1 |

### 本文テンプレート

```
Getting version information.
```

### 添付ファイル

なし

## テンプレート変数

なし（固定メッセージ）

## 送信トリガー・条件

### トリガー一覧

| トリガー種別 | トリガーイベント | 送信条件 | 説明 |
|------------|----------------|---------|------|
| ストアドプロシージャ実行 | バージョン情報取得開始 | @Debug IN (1, 2) | デバッグモードが有効 |

### 送信抑止条件

| 条件 | 説明 |
|-----|------|
| @Debug = 0 | デバッグモードが無効の場合 |

## 処理フロー

### 送信フロー

```mermaid
flowchart TD
    A[sp_Blitz実行] --> B[出力パラメータ設定]
    B --> C{@Debug IN 1,2?}
    C -->|No| D[バージョン情報取得処理へ]
    C -->|Yes| E[RAISERROR Getting version information]
    E --> D
    D --> F[SERVERPROPERTY ProductVersion 取得]
    F --> G[@ProductVersionMajor 設定]
    F --> H[@ProductVersionMinor 設定]
    G --> I[バージョン依存処理の制御]
    H --> I
```

## データベース参照・更新仕様

### 参照テーブル一覧

なし（システム関数のみ使用）

### テーブル別参照項目詳細

該当なし

### 更新テーブル一覧

なし（変数への代入のみ）

### 変数設定

| 変数名 | 設定値 | 用途 |
|-------|-------|------|
| @ProductVersion | SERVERPROPERTY('ProductVersion') | 完全バージョン文字列 |
| @ProductVersionMajor | バージョンの最初の部分 | メジャーバージョン判定 |
| @ProductVersionMinor | バージョンの2番目の部分 | マイナービルド判定 |

## エラー処理

### エラーケース一覧

| エラー種別 | 発生条件 | 対処方法 |
|----------|---------|---------|
| 該当なし | SERVERPROPERTY('ProductVersion')は常に成功 | - |

### リトライ仕様

| 項目 | 内容 |
|-----|------|
| リトライ回数 | 0（リトライなし） |
| リトライ間隔 | - |
| リトライ対象エラー | - |

## 配信設定

### レート制限

なし

### 配信時間帯

制限なし

## セキュリティ考慮事項

- バージョン情報は機密性の低い情報です
- デバッグモードでのみ出力されるため、実運用への影響はありません

## 備考

- 取得されたバージョン情報は、後続のチェック処理でバージョン固有機能の制御に使用されます
- 例：特定のDMVは特定バージョン以降でのみ使用可能
- @ProductVersionMajorは「15.」（SQL Server 2019）のような形式で格納されます

---

## コードリーディングガイド

本通知を理解するために参照すべきファイルと、推奨する読み解き順序を以下に示す。

### 推奨読解順序

#### Step 1: データ構造を理解する

バージョン情報を格納する変数の定義を理解することが重要です。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | sp_Blitz.sql | `sp_Blitz.sql` | @ProductVersion、@ProductVersionMajor、@ProductVersionMinor変数の宣言 |

**読解のコツ**: DECLARE文でNVARCHAR型として宣言されている変数を確認します。

#### Step 2: エントリーポイントを理解する

バージョン情報取得処理の開始部分を確認します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | sp_Blitz.sql | `sp_Blitz.sql` | RAISERRORとSERVERPROPERTY呼び出し |

**主要処理フロー**:
1. **行1241**: RAISERROR('Getting version information.', 0, 1)
2. **行1243**: @ProductVersion = SERVERPROPERTY('ProductVersion')
3. **行1244-1245**: @ProductVersionMajor、@ProductVersionMinorの抽出

#### Step 3: バージョン情報の使用箇所を理解する

取得されたバージョン情報がどこで使用されるかを確認します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | sp_Blitz.sql | `sp_Blitz.sql` | @ProductVersionMajor、@ProductVersionMinorの参照箇所 |

**主要処理フロー**:
- バージョン依存のDMV参照
- バージョン固有機能のチェック有効/無効制御

### プログラム呼び出し階層図

```
sp_Blitz
    |
    +-- 出力パラメータ設定
    |
    +-- (条件) @Debug IN (1, 2)
    |       |
    |       +-- RAISERROR('Getting version information.')
    |
    +-- SERVERPROPERTY('ProductVersion')
            |
            +-- @ProductVersion 設定
            |
            +-- SUBSTRING/CHARINDEX
            |       |
            |       +-- @ProductVersionMajor 設定
            |
            +-- PARSENAME
                    |
                    +-- @ProductVersionMinor 設定
```

### データフロー図

```
[入力]                         [処理]                    [出力]

SERVERPROPERTY('ProductVersion')
        |
        +---> @ProductVersion (例: "15.0.4123.1")
                |
                +---> SUBSTRING      --> @ProductVersionMajor (例: "15.")
                |
                +---> PARSENAME      --> @ProductVersionMinor (例: "4123")
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| sp_Blitz.sql | `sp_Blitz.sql` | ソース | 本通知を発行するストアドプロシージャ |
| Install-All-Scripts.sql | `Install-All-Scripts.sql` | ソース | sp_Blitzを含むインストールスクリプト |
