クエリを使用してSQLServerでテーブルを作成するには:
- SQL Server Management Studioで、 新しいクエリ をクリックします ツールバーのボタン
-
CREATE TABLE
を入力または貼り付けます スクリプト(以下の例) - をクリックしてください!実行 ツールバーのボタン
次に例を示します:
CREATETABLEスクリプト
上記の例のSQLスクリプトは次のとおりです。
CREATE TABLE Status( StatusId int IDENTITY(1,1) NOT NULL, StatusName varchar(50) NOT NULL, DateCreated datetime NOT NULL CONSTRAINT DF_Status_DateCreated DEFAULT (getdate()), CONSTRAINT PK_Status PRIMARY KEY CLUSTERED (StatusId) )
スクリプトは次のことを行います:
- テーブルを作成します
- 3列を追加
- データ型を設定します
- StatusIdがID列であり、最初のレコードの値が1になり、後続の各レコードの値が1ずつ増加することを指定します
- StatusName列の値の最大長を50にすることができることを指定します
- NULL値が許可されないことを指定します
- DateCreated列の現在の日付のデフォルト値を設定します
- StatusIdフィールドを主キーとして設定します
これは、1つの小さなテーブルのみを作成する基本的なスクリプトです。データベース全体を作成するスクリプトを同じように簡単に実行でき、そのすべてのオブジェクトとデータ、およびアクセス許可がすべて一度に実行されます。
スクリプトの改善
データベースオブジェクトを作成するときは、オブジェクトがすでに存在するかどうかを確認することをお勧めします。これにより、スクリプトがすでにデータベースにあるテーブルを作成しようとしたときにエラーが発生するのを防ぎます。
テーブルがまだ存在しない場合にのみ実行
上記のスクリプトに次の行を追加すると、CREATE TABLEスクリプトは、テーブルがデータベース(または同じ名前のテーブル)にまだ存在しない場合にのみ実行されます。
IF NOT EXISTS (SELECT * FROM sysobjects WHERE name='Status' AND xtype='U')
したがって、スクリプト全体は次のようになります。
IF NOT EXISTS (SELECT * FROM sysobjects WHERE name='Status' AND xtype='U') CREATE TABLE Status( StatusId int IDENTITY(1,1) NOT NULL, StatusName varchar(50) NOT NULL, DateCreated datetime NOT NULL CONSTRAINT DF_Status_DateCreated DEFAULT (getdate()), CONSTRAINT PK_Status PRIMARY KEY CLUSTERED (StatusId) )
テーブルがすでに存在する場合はテーブルを交換します
テーブルがすでに存在する場合は、スクリプトを書き直してテーブルを置き換えることもできます。これは、最初に既存のテーブルを削除してから、新しいテーブルを作成することで実行できます。
SQL Server 2016
SQL Server 2016では、DROPIFEXISTS句が導入されました。したがって、SQL Server 2016では、スクリプトの先頭に次を追加できます。
DROP TABLE IF EXISTS [TaskTracker].[Status]
(TaskTrackerはデータベースの名前です。Statusはテーブルの名前です。)
DROP TABLE IF EXISTS [TaskTracker].[Status] CREATE TABLE Status( StatusId int IDENTITY(1,1) NOT NULL, StatusName varchar(50) NOT NULL, DateCreated datetime NOT NULL CONSTRAINT DF_Status_DateCreated DEFAULT (getdate()), CONSTRAINT PK_Status PRIMARY KEY CLUSTERED (StatusId) )
SQLServer2014以前
以前のバージョンのSQLServerを使用している場合は、以下を使用して既存のテーブルを削除できます。
IF EXISTS (SELECT * FROM sysobjects WHERE name='Status' AND xtype='U') DROP TABLE Status
したがって、スクリプト全体は次のようになります。
IF EXISTS (SELECT * FROM sysobjects WHERE name='Status' AND xtype='U') DROP TABLE Status CREATE TABLE Status( StatusId int IDENTITY(1,1) NOT NULL, StatusName varchar(50) NOT NULL, DateCreated datetime NOT NULL CONSTRAINT DF_Status_DateCreated DEFAULT (getdate()), CONSTRAINT PK_Status PRIMARY KEY CLUSTERED (StatusId) )
既存のテーブルからのスクリプトの生成
SSMS GUIのオブジェクトエクスプローラーを使用して、既存のテーブルからSQLスクリプトを生成できます。これを行うと、SQL ServerはテーブルからすべてのSQLコードを生成し、スクリプトを作成します。
これを行うには、テーブルを右クリックして、 Script table as ...を選択します。 次に、プロンプトに従います。
これはテーブルだけに限定されるものではありません。同じメソッドを使用して任意のデータベースオブジェクトをスクリプト化できます。
SQLスクリプトの作成に慣れていない場合は、GUIを使用してテーブルを作成してから、テーブルからSQLスクリプトを生成してみてください。