SQL: CREATE 文

2016/12/30

[もどる]


CREATE TABLE

複数の主キーを指定するには

PRIMARY KEY(column1, column2, ..) のように指定する。

CREATE TABLE [dbo].[TAG](
	[Tag] [char](1) NOT NULL,
	[TableName] [varchar](20) NOT NULL,
	[Info] [nvarchar](100) NULL,
	PRIMARY KEY([Tag],[TableName])
);
 

他のテーブルを元にテーブルを作成するには

他のテーブルを元にテーブルを作成するには、CREATE TABLE ではなく、SELECT * INTO を使用する。これはデータも同時にコピーするが、構造だけコピーするには WHERE 句で常に偽になる条件を指定すればよい。

SELECT * INTO ASSET_DAY FROM ASSET_MONTH WHERE 0=1;
 

主キーに連続番号を指定するには

IDENTITY を付加すると連続番号が自動的に取られる。

-- 取引先
CREATE TABLE dbo.Agents (
  Id int not null IDENTITY,     -- 取引先コード
  [Name] nvarchar(50) not null, -- 取引先名称
  AgentClass char(1),           -- 取引先区分
  ZipCode char(8),              -- 郵便番号
  Address nvarchar(100),        -- 住所
  Telephone char(10),           -- 電話番号
  Fax char(10),                 -- FAX 番号
  Mail varchar(50),             -- メールアドレス
  Info nvarchar(100),           -- 情報
  PRIMARY KEY(Id)
);
 

既定値を指定するには

カラムの既定値を指定するには DEFAULT を使用する。

CREATE TABLE [dbo].[TAG](
	[Tag] [char](1) NOT NULL DEFAULT ' ',
	[TableName] [varchar](20) NOT NULL,
	[Info] [nvarchar](100) NULL,
	PRIMARY KEY([Tag],[TableName])
);
 

値が重ならないようにするには

UNIQUE を指定すると値が重ならないようにできる。

-- 取引先
CREATE TABLE dbo.Agents (
  Id int not null IDENTITY,           -- 取引先コード
  Name nvarchar(50) not null UNIQUE,  -- 取引先名称
  AgentClass char(1),                 -- 取引先区分
  ZipCode char(8),                    -- 郵便番号
  Address nvarchar(100) UNIQUE,       -- 住所
  Telephone char(10) UNIQUE,          -- 電話番号
  Fax char(10),                       -- FAX 番号
  Mail varchar(50),                   -- メールアドレス
  Info nvarchar(100),                 -- 情報
  PRIMARY KEY(Id)
);
 

外部キーを指定するには

次のサンプルは「取引先区分」テーブル (AgentClass) の Code を「取引先

-- 取引先
CREATE TABLE dbo.Agents (
  Id int not null IDENTITY,           -- 取引先コード
  Name nvarchar(50) not null UNIQUE,  -- 取引先名称
  AgentClass char(1),                 -- 取引先区分
  ZipCode char(8),                    -- 郵便番号
  Address nvarchar(100) UNIQUE,       -- 住所
  Telephone char(10) UNIQUE,          -- 電話番号
  Fax char(10),                       -- FAX 番号
  Mail varchar(50),                   -- メールアドレス
  Info nvarchar(100),                 -- 情報
  PRIMARY KEY(Id),
  FOREIGN KEY (AgentClass) REFERENCES dbo.AgentClass(Code)
);
-- 取引先区分
CREATE TABLE AgentClass (
  Code CHAR(1) NOT NULL PRIMARY KEY, -- コード
  Abbrebiation NVARCHAR(20),         -- 略称
  Info NVARCHAR(100)                 -- 情報
);

データのチェックを指定するには

次のサンプルは、TitleClass が 'P' または 'D' だけしか取れないように制限をかけている。

CREATE TABLE dbo.Titles (
  Id int not null IDENTITY,
  Title nvarchar(100) not null,
  TitleClass char(1),
  Tag char(1) not null DEFAULT ' ',
  [Path] nvarchar(300),
  Info nvarchar(100),
  PRIMARY KEY(Id),
  CHECK(TitleClass='P' OR TitleClass='D')
);
 

文字列型について

説明
nchar固定長の Unicode 文字列。最大長は 4000 文字。
nvarchar可変長の Unicode 文字列。最大長は 4000 文字。
charUnicode ではない固定長の文字列データ。最大長は 8000 文字。
varcharUnicode ではない可変長の文字列。最大長は 8000 文字。

整数型について

長さ
bigint8 バイト
int4 バイト
smallint2 バイト
tinyint1 バイト (0 .. 255)

テーブルとカラムコメント

テーブルコメントを付ける例を示す。

exec sys.sp_addextendedproperty @name=N'MS_Description',
                                @value=N'取引先マスターの取引先区分定義',
                                @level0type=N'SCHEMA',
                                @level0name=N'dbo',
                                @level1type=N'TABLE',
                                @level1name=N'AgentClass';
 

テーブルのカラムにコメントを付ける例を示す。

exec sys.sp_addextendedproperty @name=N'MS_Description',
                                @value=N'取引先区分コード',
                                @level0type=N'SCHEMA',
                                @level0name=N'dbo',
                                @level1type=N'TABLE',
                                @level1name=N'AgentClass',
                                @level2type=N'COLUMN',
                                @level2name=N'Code';
 

次のSQLはカラムコメントを表示する。

SELECT
     t.name  AS TABLE_NAME,
     c.name  AS COLUMN_NAME,
     e.value AS COMMENT
FROM
     sys.tables AS t,
     sys.columns AS c,
     sys.extended_properties AS e
WHERE
        t.name = 'AgentClass'
    AND t.object_id = c.object_id
    AND c.object_id = e.major_id
    AND c.column_id = e.minor_id;
 

 

CREATE DATABASE

通常は次のようにするだけで新しいデータベースが作成される。

  CREATE DATABASE DB1;
 

 

CREATE VIEW

次のサンプルは、テーブル一覧を取得するビューの作成例である。

   CREATE VIEW dbo.VW_TABLES AS
     SELECT TABLE_SCHEMA + '.' + TABLE_NAME AS NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE';
 

 

CREATE SYNONYM

次のサンプルは、ColorSet というテーブルのシノニム Colors を作成する。

CREATE SYNONYM Colors FOR dbo.ColorSet;