

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# SQL Server から MySQL への変換
<a name="CHAP_Source.SQLServer.ToMySQL"></a>

変換した MySQL コードで Microsoft SQL Server データベース関数をエミュレートするには、 AWS SCTで SQL Server から MySQL への拡張パックを使用します。拡張機能の詳細については、「[での拡張パックの使用 AWS Schema Conversion Tool](CHAP_ExtensionPack.md)」を参照してください。

**Topics**
+ [MySQL をターゲットデータベースとする場合の権限](#CHAP_Source.SQLServer.ToMySQL.ConfigureTarget)
+ [SQL Server から MySQL への変換設定](#CHAP_Source.SQLServer.ToMySQL.ConversionSettings)
+ [移行に関する考慮事項](#CHAP_Source.SQLServer.ToMySQL.MigrationConsiderations)

## MySQL をターゲットデータベースとする場合の権限
<a name="CHAP_Source.SQLServer.ToMySQL.ConfigureTarget"></a>

ターゲットとして MySQL に必要な権限を以下に示します。
+ CREATE ON \$1.\$1
+ ALTER ON \$1.\$1
+ DROP ON \$1.\$1
+ INDEX ON \$1.\$1
+ REFERENCES ON \$1.\$1
+ SELECT ON \$1.\$1
+ CREATE VIEW ON \$1.\$1
+ SHOW VIEW ON \$1.\$1
+ TRIGGER ON \$1.\$1
+ CREATE ROUTINE ON \$1.\$1
+ ALTER ROUTINE ON \$1.\$1
+ EXECUTE ON \$1.\$1
+ INSERT, UPDATE ON AWS\$1SQLSERVER\$1EXT.\$1
+ INSERT, UPDATE, DELETE ON AWS\$1SQLSERVER\$1EXT\$1DATA.\$1
+ CREATE TEMPORARY TABLES ON AWS\$1SQLSERVER\$1EXT\$1DATA.\$1

次のコード例を使用してデータベースユーザーを作成し、権限を付与できます。

```
CREATE USER 'user_name' IDENTIFIED BY 'your_password';
GRANT CREATE ON *.* TO 'user_name';
GRANT ALTER ON *.* TO 'user_name';
GRANT DROP ON *.* TO 'user_name';
GRANT INDEX ON *.* TO 'user_name';
GRANT REFERENCES ON *.* TO 'user_name';
GRANT SELECT ON *.* TO 'user_name';
GRANT CREATE VIEW ON *.* TO 'user_name';
GRANT SHOW VIEW ON *.* TO 'user_name';
GRANT TRIGGER ON *.* TO 'user_name';
GRANT CREATE ROUTINE ON *.* TO 'user_name';
GRANT ALTER ROUTINE ON *.* TO 'user_name';
GRANT EXECUTE ON *.* TO 'user_name';
GRANT INSERT, UPDATE ON AWS_SQLSERVER_EXT.* TO 'user_name';
GRANT INSERT, UPDATE, DELETE ON AWS_SQLSERVER_EXT_DATA.* TO 'user_name';
GRANT CREATE TEMPORARY TABLES ON AWS_SQLSERVER_EXT_DATA.* TO 'user_name';
```

前述の例では、[*user\$1name*] をお客様の設定のユーザー名に置き換えます。*your\$1password* を安全なパスワードに置き換えます。

バージョン 5.7 以前の MySQL データベースをターゲットとして使用する場合は、次のコマンドを実行します。MySQL データベースバージョン 8.0 以降では、このコマンドは廃止されました。

```
GRANT SELECT ON mysql.proc TO 'user_name';
```

Amazon RDS for MySQL または Aurora MySQL をターゲットとして使用するには、`lower_case_table_names` パラメータを `1` に設定します。この値は、MySQL サーバーがテーブル、インデックス、トリガー、データベースなどのオブジェクト名の識別子を、大文字と小文字を区別せずに処理することを意味します。ターゲットインスタンスでバイナリログを有効にしている場合は、`log_bin_trust_function_creators` パラメータを `1` と設定します。この場合、ストアド関数を作成するのに、`DETERMINISTIC` 特性、`READS SQL DATA` 特性、`NO SQL` 特性を使用する必要はありません。これらのパラメータを設定するには、新しい DB パラメータグループを作成するか、既存の DB パラメータグループを変更します。

## SQL Server から MySQL への変換設定
<a name="CHAP_Source.SQLServer.ToMySQL.ConversionSettings"></a>

SQL Server から MySQL への変換設定を編集するには、**「設定** AWS SCT 」を選択し、**「変換設定**」を選択します。上のリストから **[SQL Server]** を選択し、**[SQL Server — MySQL]** を選択します。 AWS SCT に、SQL Server から MySQL への変換に使用可能なすべての設定が表示されます。

の SQL Server から MySQL への変換設定には、次のオプション AWS SCT が含まれます。
+ 変換されたコード内のアクション項目に関するコメントの数を制限する。

  選択した**重要度以上のアクション項目の変換されたコードにコメントを追加する で**、アクション項目の重要度を選択します。 は、選択した重要度以上のアクション項目の変換されたコードにコメント AWS SCT を追加します。

  たとえば、変換したコード内のコメントの数を最小限に抑えるには、[**エラーのみ**] を選択します。変換したコードのすべてのアクション項目にコメントを含めるには、[**すべてのメッセージ**] を選択します。
+ ソース SQL Server データベースがテーブル`EXEC`に の出力を保存できるようにするには。 は一時テーブルと、この機能をエミュレートするための追加の手順 AWS SCT を作成します。このエミュレーションを使用するには、[**オープンデータセットを処理するための追加ルーチンを作成する**] を選択します。

## 移行に関する考慮事項
<a name="CHAP_Source.SQLServer.ToMySQL.MigrationConsiderations"></a>

SQL Server スキーマを MySQL に移行する際は以下の点を考慮してください。
+ MySQL は `MERGE` ステートメントをサポートしていません。ただし、 は `INSERT ON DUPLICATE KEY`句と `MERGE`ステートメントを使用して、変換中に `UPDATE FROM and DELETE FROM`ステートメントをエミュレート AWS SCT できます。

  `INSERT ON DUPLICATE KEY` を使用して正しくエミュレーションするために、一意の制約またはプライマリキーがターゲット MySQL データベースで存在することを確認してください。
+ `GOTO` ステートメントとラベルを使用して、ステートメントを実行する順序を変更できます。`GOTO` ステートメントに続くすべての Transact-SQL ステートメントはスキップされ、ラベルで処理が継続されます。`GOTO` ステートメントとラベルは、プロシージャ、バッチ、またはステートメント ブロック内のどこでも使用できます。`GOTO` ステートメントをネストすることもできます。

  MySQL は `GOTO` ステートメントを使用しません。は、 `GOTO`ステートメントを含むコードを AWS SCT 変換すると、 ステートメントを `BEGIN…END`または `LOOP…END LOOP`ステートメントを使用するように変換します。が`GOTO`ステートメントを AWS SCT 変換する方法の例を次の表に示します。  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/SchemaConversionTool/latest/userguide/CHAP_Source.SQLServer.ToMySQL.html)
+ MySQL は、複数ステートメントのテーブル値関数をサポートしていません。 は、一時テーブルを作成し、これらの一時テーブルを使用するようにステートメントを書き換えることで、変換中にテーブル値関数を AWS SCT シミュレートします。