SQL Server 2008 R2 で列にユニーク制約を作成する利点
SQL Server 2008 R2で列にユニーク制約を作成する方法
SQL Server 2008 R2で列にユニーク制約を作成するには、以下の2つの方法があります。
ALTER TABLE ステートメントを使用する
最も一般的な方法は、ALTER TABLE
ステートメントを使用して既存のテーブルにユニーク制約を追加する方法です。構文は以下の通りです。
ALTER TABLE table_name
ADD CONSTRAINT constraint_name UNIQUE (column1, column2, ...);
ここで、
table_name
は、ユニーク制約を追加するテーブルの名前です。constraint_name
は、ユニーク制約の名前です。column1, column2, ...
は、一意である必要がある列の名前です。
例:
Customers
テーブルの CustomerID
列にユニーク制約を作成するには、次のステートメントを使用します。
ALTER TABLE Customers
ADD CONSTRAINT UC_CustomerID UNIQUE (CustomerID);
CREATE TABLE ステートメントを使用する
テーブルを作成する際に、CREATE TABLE
ステートメントを使用してユニーク制約を定義することもできます。構文は以下の通りです。
CREATE TABLE table_name (
column1 data_type,
column2 data_type,
...,
CONSTRAINT constraint_name UNIQUE (column1, column2, ...)
);
CREATE TABLE Employees (
EmployeeID int NOT NULL,
FirstName varchar(50),
LastName varchar(50),
CONSTRAINT UC_EmployeeID UNIQUE (EmployeeID)
);
注意事項:
- ユニーク制約を作成する前に、列のデータ型が適切であることを確認してください。たとえば、
CustomerID
列が文字列型の場合は、一意性を保証するために適切なインデックスを作成する必要があります。 - ユニーク制約は、既存のデータに適用されます。既存のデータに重複がある場合は、エラーが発生する可能性があります。
- ユニーク制約を削除するには、
ALTER TABLE
ステートメントを使用してDROP CONSTRAINT
を使用します。
ALTER TABLE ステートメントを使用する
ALTER TABLE Customers
ADD CONSTRAINT UC_CustomerID UNIQUE (CustomerID);
このコードは、Customers
テーブルの CustomerID
列に UC_CustomerID
という名前のユニーク制約を作成します。この制約により、CustomerID
列の値がすべて一意であることが保証されます。
CREATE TABLE ステートメントを使用する
CREATE TABLE Employees (
EmployeeID int NOT NULL,
FirstName varchar(50),
LastName varchar(50),
CONSTRAINT UC_EmployeeID UNIQUE (EmployeeID)
);
このコードは、Employees
という名前のテーブルを作成し、EmployeeID
、FirstName
、LastName
という3つの列を定義します。EmployeeID
列には NOT NULL
制約が設定されており、UC_EmployeeID
という名前のユニーク制約が設定されています。この制約により、EmployeeID
列の値がすべて一意であることが保証されます。
以下の例は、様々な列にユニーク制約を作成する方法を示しています。
- 複合ユニーク制約: 複数の列で構成されるユニーク制約を作成するには、
,
(コンマ) で区切って列名を指定します。
ALTER TABLE Orders
ADD CONSTRAINT UC_OrderNo_CustomerID UNIQUE (OrderNo, CustomerID);
- インデックス付きユニーク制約: ユニーク制約とともにインデックスを作成するには、
WITH (INDEX = index_name)
オプションを使用します。
CREATE TABLE Products (
ProductID int NOT NULL,
ProductName varchar(50),
UnitPrice money,
CONSTRAINT UC_ProductID UNIQUE (ProductID) WITH (INDEX = IX_Products_ProductID)
);
- 除外制約: 特定の値をユニーク制約から除外するには、
WHERE
句を使用します。
ALTER TABLE Customers
ADD CONSTRAINT UC_CustomerID_NoGuest UNIQUE (CustomerID)
WHERE CustomerType <> 'Guest';
SQL Server 2008 R2 で列にユニーク制約を作成するその他の方法
SQL Server Management Studio (SSMS) を使用する
SSMS は、SQL Server とやり取りするためのグラフィカル ツールです。SSMS を使用して、次の手順で列にユニーク制約を作成できます。
- SSMS で、ユニーク制約を作成するテーブルを含むデータベースに接続します。
- オブジェクト エクスプローラーで、テーブルを右クリックし、[デザイン]を選択します。
- テーブル デザイナーが開きます。
- [列] タブをクリックします。
- 一意制約を作成する列を選択します。
- [一般] タブで、[一意キー] チェックボックスをオンにします。
- 必要に応じて、制約の名前を変更します。
- [OK] をクリックして、変更を保存します。
Visual Basic .NET または C# などのプログラミング言語を使用して、SQL Server とやり取りするコードを書くことができます。次のコード例は、ALTER TABLE
ステートメントを使用して Customers
テーブルの CustomerID
列にユニーク制約を作成する方法を示しています。
using System.Data.SqlClient;
class Program
{
static void Main(string[] args)
{
// 接続文字列を指定します
string connectionString = "Data Source=myServer.database.com;Initial Catalog=myDatabase;Integrated Security=True";
// SqlConnection オブジェクトを作成します
using (SqlConnection connection = new SqlConnection(connectionString))
{
// SqlCommand オブジェクトを作成します
using (SqlCommand command = new SqlCommand("ALTER TABLE Customers ADD CONSTRAINT UC_CustomerID UNIQUE (CustomerID)", connection))
{
// 接続を開きます
connection.Open();
// コマンドを実行します
command.ExecuteNonQuery();
// 接続を閉じます
connection.Close();
}
}
}
}
このコードは、C# コンソール アプリケーションとして記述されています。コードを実行するには、Visual Studio などの IDE でプロジェクトを作成し、このコードをプロジェクトに追加する必要があります。次に、プロジェクトをビルドして実行し、myServer.database.com
、myDatabase
、および sa
を実際の値に置き換える必要があります。
PowerShell は、タスクを自動化するために使用できるコマンドライン シェルです。次の PowerShell コマンドは、ALTER TABLE
ステートメントを使用して Customers
テーブルの CustomerID
列にユニーク制約を作成する方法を示しています。
Add-SqlConstraint -ServerName myServer -DatabaseName myDatabase -TableName Customers -ColumnName CustomerID -ConstraintType UNIQUE
このコマンドを実行するには、PowerShell を開き、このコマンドを貼り付けて Enter キーを押します。myServer
、myDatabase
、および CustomerID
を実際の値に置き換える必要があります。
sql sql-server sql-server-2008