1. ホーム
  2. sql-server

[解決済み】複数列の一意性制約

2022-04-04 03:01:27

質問

CREATE TABLE [dbo].[user](
        [userID] [int] IDENTITY(1,1) NOT NULL,
        [fcode] [int] NULL,
        [scode] [int] NULL,
        [dcode] [int] NULL,
        [name] [nvarchar](50) NULL,
        [address] [nvarchar](50) NULL,
     CONSTRAINT [PK_user_1] PRIMARY KEY CLUSTERED 
    (
        [userID] ASC
    )
    ) ON [PRIMARY]

    GO

カラムに一意制約を追加する方法 fcode, scode, dcodet-sql および/または management studio ? fcode, scode, dcode は一緒に一意でなければなりません。

解決方法は?

テーブル作成時に制約定義を使用することで、複数の列にまたがる1つまたは複数の制約を指定することができます。構文は、以下のように簡略化されています。 テクネットのドキュメント という形式になっている。

CONSTRAINT constraint_name UNIQUE [ CLUSTERED | NONCLUSTERED ] 
(
    column [ ASC | DESC ] [ ,...n ]
)

従って、レスティングテーブルの定義は次のようになる。

CREATE TABLE [dbo].[user](
    [userID] [int] IDENTITY(1,1) NOT NULL,
    [fcode] [int] NULL,
    [scode] [int] NULL,
    [dcode] [int] NULL,
    [name] [nvarchar](50) NULL,
    [address] [nvarchar](50) NULL,
    CONSTRAINT [PK_user_1] PRIMARY KEY CLUSTERED 
    (
        [userID] ASC
    ),
    CONSTRAINT [UQ_codes] UNIQUE NONCLUSTERED
    (
        [fcode], [scode], [dcode]
    )
) ON [PRIMARY]