web-dev-qa-db-ja.com

複数列に対するユニークな制約

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, dcodeおよび/またはt-sqlを使用して、列management studioに一意の制約を追加する方法を教えてください。 fcode, scode, dcodeは互いに一意である必要があります。

224
loviji

テーブル作成時に制約定義を使用することで、複数の列にわたる1つまたは複数の制約を指定できます。 technetのドキュメント から簡略化された構文は、次の形式です。

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]
268
devmake

テーブルがすでにデータベースに作成されている場合は、このSQLクエリを使用して後で一意の制約を追加できます。

ALTER TABLE dbo.User
  ADD CONSTRAINT ucCodes UNIQUE (fcode, scode, dcode)
378
marc_s

これはGUIでも実行できます。これは、既存のテーブルに複数列のユニーク制約を追加する例です。

  1. テーブルの下で、右クリックインデックス - >クリック/ホバー新しいインデックス - >クリック非クラスタ化インデックス...

enter image description here

  1. デフォルトのインデックス名が与えられますが、変更することもできます。 固有のチェックボックスをオンにして、追加...ボタンをクリックします。

enter image description here

  1. 含める列を確認してください

enter image description here

各ウィンドウでOKをクリックすれば完了です。

40
Tony L.
USE [TSQL2012]
GO

/****** Object:  Table [dbo].[Table_1]    Script Date: 11/22/2015 12:45:47 PM ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[Table_1](
    [seq] [bigint] IDENTITY(1,1) NOT NULL,
    [ID] [int] NOT NULL,
    [name] [nvarchar](50) NULL,
    [cat] [nvarchar](50) NULL,
 CONSTRAINT [PK_Table_1] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY],
 CONSTRAINT [IX_Table_1] UNIQUE NONCLUSTERED 
(
    [name] ASC,
    [cat] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
0
Muhanned Kamil