# 帳票設計書 7-Export-DbaDbTableData

## 概要

本ドキュメントは、dbatools PowerShellモジュールのExport-DbaDbTableDataコマンドレットに関する帳票設計書です。テーブルデータからINSERT文を生成し、移行やデプロイスクリプトとして使用する機能について記載しています。

### 本帳票の処理概要

Export-DbaDbTableDataは、既存のテーブルデータから実行可能なINSERT文を作成するコマンドレットです。SQL Serverインスタンス間または環境間でデータを移動する際に特に有用で、参照テーブル、ルックアップデータ、構成テーブルなどのデータ移行に最適です。

**業務上の目的・背景**：データベース移行においてスキーマだけでなく実際のデータ値が必要な場合があります。本コマンドは、テーブル構造ではなくデータ値を含むスクリプトを生成することで、参照テーブルやマスターデータの移行を容易にします。

**帳票の利用シーン**：
1. 参照テーブル（コードマスタ等）のデータ移行
2. ルックアップデータの環境間同期
3. 構成テーブルの初期データ投入スクリプト作成
4. テストデータの準備スクリプト作成
5. データバックアップ（スクリプト形式）

**主要な出力内容**：
1. INSERT INTO文（各行ごと）
2. USEデータベースコンテキスト文
3. バッチセパレータ（オプション）

**帳票の出力タイミング**：Get-DbaDbTableの結果をパイプラインで受け取り、Export-DbaDbTableDataを実行した時点でINSERTスクリプトが生成されます。

**帳票の利用者**：データベース管理者（DBA）、データベース開発者、データ移行エンジニア

## 帳票種別

テーブルデータスクリプト（T-SQL INSERT文）

## 利用画面

| 画面No | 画面名 | URL/ルーティング | 出力操作 |
|--------|--------|-----------------|---------|
| N/A | PowerShellコンソール | N/A | Export-DbaDbTableDataコマンド実行 |

## 出力形式

### 基本仕様

| 項目 | 内容 |
|-----|------|
| ファイル形式 | SQL (.sql) |
| 用紙サイズ | N/A（スクリプトファイル） |
| 向き | N/A |
| ファイル名 | 自動生成または指定 |
| 出力方法 | ファイル出力 / パイプライン出力 |
| 文字コード | UTF8（デフォルト） |

### 出力モード

| モード | 条件 | 出力先 |
|-------|------|-------|
| ファイル出力 | -Path または -FilePath 指定時 | 指定ファイル |
| パイプライン出力 | -Passthru 指定時 | パイプライン（文字列） |

## 帳票レイアウト

### レイアウト概要

INSERT文スクリプトはデータベースコンテキストとデータ行で構成されます。

```
┌─────────────────────────────────────┐
│    ヘッダーコメント（オプション）      │
│  /* Created by... */               │
├─────────────────────────────────────┤
│    USE [DatabaseName]              │
│    GO                               │
├─────────────────────────────────────┤
│    INSERT INTO [Schema].[Table]    │
│    ([Column1], [Column2], ...)     │
│    VALUES (Value1, Value2, ...)    │
│                                     │
│    INSERT INTO ...                  │
│         ...                         │
└─────────────────────────────────────┘
```

### ヘッダー部

| No | 項目名 | 説明 | データ取得元 | 表示形式 |
|----|-------|------|-------------|---------|
| 1 | コメント | 作成者、作成日時情報 | 自動生成 | /* ... */ |
| 2 | USEステートメント | データベースコンテキスト | IncludeDatabaseContext | T-SQL |

### 明細部

| No | 項目名 | 説明 | データ取得元 | 表示形式 | 列幅 |
|----|-------|------|-------------|---------|-----|
| 1 | INSERT文 | テーブルへのINSERT文 | SMO ScriptData | T-SQL | 可変 |
| 2 | バッチセパレータ | GOまたはカスタム区切り | BatchSeparator | 文字列 | N/A |

### フッター部

コマンドはファイル出力時にFileInfoオブジェクト、Passthru時に文字列を返します。

## 出力条件

### 抽出条件

| 条件名 | 説明 | 必須 |
|-------|------|-----|
| InputObject | Get-DbaDbTableからのテーブルオブジェクト | Yes |
| Path | 出力ディレクトリ | No |
| FilePath | 出力ファイルパス | No |

### ソート順

| 優先度 | 項目 | 昇順/降順 |
|-------|------|---------|
| 1 | テーブル内の行順（クラスタ化インデックス順） | N/A |

### 改ページ条件

スクリプトファイルのため改ページは適用されません。

## データベース参照仕様

### 参照テーブル一覧

| テーブル名 | 用途 | 結合条件 |
|-----------|------|---------|
| 指定テーブル | データ取得元 | SMO経由 |

### SMOスクリプト設定

| プロパティ | 値 | 説明 |
|-----------|---|------|
| ScriptSchema | $false | スキーマ定義を除外 |
| ScriptData | $true | データ（INSERT文）を含む |
| IncludeDatabaseContext | $true | USEステートメントを含む |

## 計算仕様

### 計算項目一覧

| 項目名 | 計算式 | 端数処理 | 備考 |
|-------|-------|---------|------|
| 特になし | N/A | N/A | データはそのままINSERT文に変換 |

## 処理フロー

### 出力フロー

```mermaid
flowchart TD
    A[Export-DbaDbTableData実行] --> B[ScriptingOptions設定]
    B --> C[ScriptSchema = false]
    C --> D[ScriptData = true]
    D --> E[IncludeDatabaseContext = true]
    E --> F[Export-DbaScript呼び出し]
    F --> G{Passthru?}
    G -->|Yes| H[文字列出力]
    G -->|No| I[ファイル出力]
    I --> J[FileInfo返却]
```

## エラー処理

### エラーケース一覧

| エラー種別 | 発生条件 | 表示メッセージ | 対処方法 |
|----------|---------|--------------|---------|
| 入力タイプエラー | Table以外のオブジェクト | Export-DbaScriptのエラー | Get-DbaDbTableを使用 |
| ファイル存在エラー | NoClobber時にファイル既存 | Export-DbaScriptのエラー | NoClobberを外すかAppend使用 |

## パフォーマンス要件

| 項目 | 内容 |
|-----|------|
| 想定データ件数 | 数千〜数万行（大量データは非推奨） |
| 目標出力時間 | 行数に依存 |
| 同時出力数上限 | 1セッション |

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

- 出力スクリプトには実データが含まれるため、機密データの取り扱いに注意
- 個人情報や機密情報を含むテーブルのエクスポートは慎重に判断
- 出力ファイルのアクセス権限を適切に設定

## 備考

- 本コマンドはExport-DbaScriptのラッパー
- ScriptData=trueでINSERT文生成モード
- 大量データの場合はExport-DbaCsvやbcpの使用を検討
- BatchSeparatorはデフォルトで空文字（GO区切りなし）

---

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

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

### 推奨読解順序

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

ScriptingOptionsのScriptDataプロパティを理解します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | New-DbaScriptingOption.ps1 | `public/New-DbaScriptingOption.ps1` | ScriptingOptionsの構造 |

**読解のコツ**: ScriptSchema=false、ScriptData=true の組み合わせがデータエクスポートモード

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | Export-DbaDbTableData.ps1 | `public/Export-DbaDbTableData.ps1` | 簡潔な実装を確認 |

**主要処理フロー**:
1. **行127-132**: beginブロック - ScriptingOptions設定
2. **行134-138**: processブロック - Export-DbaScript呼び出し

#### Step 3: 実際のスクリプト生成を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | Export-DbaScript.ps1 | `public/Export-DbaScript.ps1` | ScriptData=true時の動作 |

**読解のコツ**: Export-DbaDbTableDataはExport-DbaScriptへの委譲パターン

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

```
Export-DbaDbTableData (PowerShell)
    │
    ├─ New-DbaScriptingOption
    │      └─ ScriptingOptions初期化
    │
    └─ Export-DbaScript @PSBoundParameters
           ├─ -ScriptingOptionsObject
           │      ├─ ScriptSchema = $false
           │      ├─ ScriptData = $true
           │      └─ IncludeDatabaseContext = $true
           │
           └─ SMO Scripter.EnumScript
                  └─ INSERT文生成
```

### データフロー図

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

Get-DbaDbTable             ┌──────────────────┐
     └─ Table ─────────────▶│ ScriptingOptions │
                            │ 設定             │
                            │ (ScriptData=true)│
                            └────────┬─────────┘
                                     │
                                     ▼
                            ┌──────────────────┐
                            │ Export-DbaScript │────▶  INSERT文スクリプト
                            │ 呼び出し         │       (.sql / パイプライン)
                            └──────────────────┘
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| Export-DbaDbTableData.ps1 | `public/Export-DbaDbTableData.ps1` | ソース | メインコマンドレット |
| Export-DbaScript.ps1 | `public/Export-DbaScript.ps1` | ソース | 実際のスクリプト生成 |
| New-DbaScriptingOption.ps1 | `public/New-DbaScriptingOption.ps1` | ソース | ScriptingOptions生成 |
| Get-DbaDbTable.ps1 | `public/Get-DbaDbTable.ps1` | ソース | 入力テーブル取得 |
| dbatools.psd1 | `dbatools.psd1` | 設定 | モジュールマニフェスト |
