web-dev-qa-db-fra.com

Contrainte unique sur plusieurs colonnes

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

Comment ajouter une contrainte unique pour les colonnes fcode, scode, dcode avec t-sql et/ou management studio? fcode, scode, dcode doit être unique ensemble.

234
loviji

En utilisant la définition de contrainte lors de la création de table, vous pouvez spécifier une ou plusieurs contraintes couvrant plusieurs colonnes. La syntaxe, simplifiée à partir de documentation de technet , se présente sous la forme de:

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

Par conséquent, la définition de la table suivante serait la suivante:

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

Si la table est déjà créée dans la base de données, vous pouvez ajouter une contrainte unique ultérieurement à l'aide de cette requête SQL:

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

Cela peut aussi être fait dans l'interface graphique. Voici un exemple d’ajout d’une contrainte unique multi-colonnes à une table existante.

  1. Sous la table, faites un clic droit Index -> Cliquez/survolez Nouvel index -> Cliquez sur Index non clusterisé ...

enter image description here

  1. Un nom d'index par défaut sera donné mais vous voudrez peut-être le changer. Cochez la case unique et cliquez sur le bouton Ajouter ...

enter image description here

  1. Vérifiez les colonnes que vous voulez inclure

enter image description here

Cliquez sur OK dans chaque fenêtre et vous avez terminé.

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