Birden çok sütunda benzersiz kısıtlama


249
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

Ve / veya fcode, scode, dcodeiçeren sütunlar için nasıl benzersiz bir kısıtlama ekleyebilirim ? birlikte benzersiz olmalıdır.t-sqlmanagement studiofcode, scode, dcode


9
Bu, aynı fcode VEYA scode VEYA dcode'un çoğuna sahip olabileceğiniz, ancak aynı fcode AND scode AND dcode ile asla iki kayda sahip olamayacağınız anlamına mı geliyor?
Jimbo

Yanıtlar:


291

Tablo oluşturmada kısıtlama tanımını kullanarak, birden çok sütuna yayılan bir veya birden çok kısıtlama belirtebilirsiniz. Technet'in belgelerinden basitleştirilen sözdizimi şu şekildedir:

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

Bu nedenle, sonuç tablosu tanımı şöyle olacaktır:

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]

420

Tablo zaten veritabanında oluşturulmuşsa, daha sonra bu SQL sorgusunu kullanarak benzersiz bir kısıtlama ekleyebilirsiniz:

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

Yoksa ADD CONSTRAINT ucCodes UNIQUE NONCLUSTERED?
Kiquenet

52

Bu GUI'de de yapılabilir. Mevcut bir tabloya çok sütunlu benzersiz bir kısıtlama ekleyen bir örnek.

  1. Tablonun altında, Dizinler -> Yeni Dizin'i tıklayın / üzerine gelin -> Kümelenmemiş Dizin'i tıklayın ...

resim açıklamasını buraya girin

  1. Varsayılan bir Dizin adı verilir, ancak adını değiştirmek isteyebilirsiniz. Kontrol Benzersiz onay kutusunu tıklamanız Ekle ... düğmesine

resim açıklamasını buraya girin

  1. Eklenmesini istediğiniz sütunları kontrol edin

resim açıklamasını buraya girin

Click OK her pencerede ve bitirdiniz.


1
NOT: Tablo zaten tasarım görünümünde açıksa, bu seçenek kullanılamaz. Bu yüzden yapmadan önce tasarım sekmesini kapatın.
musefan

0
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

13
Bu kod soruyu cevaplayabilirken, nasıl çalıştığını ve ne zaman kullanılacağını açıklayan bir bağlam eklemek daha iyi olur. Yalnızca kod yanıtları uzun vadede yararlı değildir.
Bono
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.