SQL ServerにMySQLのENUM型に相当する機能はある?代替方法を解説
結論から言うと、SQL ServerにはMySQLのENUMデータ型と完全に同じ組み込みデータ型は存在しません。しかし、VARCHAR型とCHECK制約を組み合わせることで、ENUMとほぼ同等の機能を実現できます。
MySQLにおけるENUM型の基本
まず、MySQL(バージョン8.0.12で動作確認済み)でのENUM型の定義方法を見てみましょう。構文は以下の通りです。
create table yourTableName
(
yourColumnName enum('Value1','Value2','Value3',......N)
default 'Value1' or 'Value2' or 'Value3',..N
);例えば、WebアプリケーションのCRUD操作を格納するカラムを持つテーブルは、次のようなクエリで作成できます。
mysql> create table EnumInMySQL
-> (
-> WebCRUD enum('CREATE','READ','UPDATE','DELETE')
-> default 'CREATE'
-> );
Query OK, 0 rows affected (0.60 sec)SQL ServerでENUMを再現する方法
SQL Serverでは、ENUM型の代わりにVARCHAR型のカラムを作成し、CHECK制約によって許容される値を制限します。構文は以下の通りです。
create table yourTableName
(
yourColumnName varchar(100)
CHECK(yourColumnName IN ('Value1','Value2','Value3',......N))
DEFAULT 'Value1' or 'Value2' or 'Value3',......N
);この方法により、許可リストに含まれない値を挿入しようとした場合にエラーが発生し、MySQLのENUMと同様の挙動になります。
実行例
実際のクエリ実行画面は以下の画像の通りです。

補足:両者の違いに注意
MySQLのENUM型は内部的に数値インデックスとして保存されるためストレージ効率が良い一方、SQL ServerのCHECK制約方式では値が文字列としてそのまま保存されます。また、許容値を変更したい場合、MySQLではALTER TABLEで列定義を修正しますが、SQL ServerではCHECK制約を一度削除してから再作成する必要がある点にも注意しましょう。
-
MS SQL Serverでデータベースのバックアップを作成する2つの方法
バックアップとは、データやデータベースの複製を作成し、保全性を確保するための仕組みです。MS SQL Serverにおいてデータベースのバックアップを定期的に取得することは、ハードウェア故障や誤操作などによるデータ損失から大切な情報を守るために非常に重要です。 MS SQL Serverには、主に以下の3種類のバックアップ方式が用意されています。 完全バックアップ(Full / Database):データベース全体を丸ごとバックアップします 差分バックアップ(Differential / Incremental):前回の完全バックアップ以降に変更された部分のみをバックアップします トランザク
-
MS SQL Serverでデータベースを作成する2つの方法|T-SQLとSSMSの手順を解説
データベースには、テーブル、ストアドプロシージャ、関数などのさまざまなオブジェクトが含まれます。MS SQL Serverでは、データベースは大きく分けて以下の2種類に分類されます。 システムデータベース ユーザーデータベース システムデータベースとは システムデータベースは、MS SQL Serverのインストール時に自動的に作成されるデータベースです。主なシステムデータベースは以下のとおりです。 Master Model / MSDB Tempdb Resource(SQL Server 2005以降で利用可能) Distribution(レプリケーション機能を使用する場合のみ)