कई स्तंभों पर अद्वितीय बाधा


248
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-sqlmanagement studiofcode, scode, dcode


9
क्या इसका मतलब यह है कि आपके पास एक ही fcode या scode या dcode में से कई हो सकते हैं लेकिन कभी भी एक ही fcode और scode और dcode के साथ दो रिकॉर्ड नहीं हैं?
Jimbo

जवाबों:


291

तालिका निर्माण पर बाधा परिभाषा का उपयोग करके, आप एक या कई अवरोधों को निर्दिष्ट कर सकते हैं जो कई स्तंभों को फैलाते हैं। सिंटैक्स, तकनीकी दस्तावेज से सरलीकृत , के रूप में है:

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

इसलिए, resuting तालिका परिभाषा होगी:

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]

419

यदि तालिका डेटाबेस में पहले से ही बनाई गई है, तो आप इस SQL ​​क्वेरी का उपयोग करके बाद में एक अद्वितीय बाधा जोड़ सकते हैं:

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

या ADD CONSTRAINT ucCodes UNIQUE NONCLUSTERED?
किकेनेट

52

यह जीयूआई में भी किया जा सकता है। यहां एक उदाहरण एक मौजूदा तालिका में एक बहु-स्तंभ अद्वितीय बाधा जोड़ रहा है।

  1. तालिका के अंतर्गत, इंडेक्स पर राइट क्लिक करें -> क्लिक / न्यू इंडेक्स पर क्लिक करें -> गैर-क्लस्टर इंडेक्स पर क्लिक करें ...

यहां छवि विवरण दर्ज करें

  1. एक डिफ़ॉल्ट इंडेक्स नाम दिया जाएगा, लेकिन आप इसे बदलना चाह सकते हैं। यूनिक चेकबॉक्स चेक करें और Add ... बटन पर क्लिक करें

यहां छवि विवरण दर्ज करें

  1. अपने इच्छित कॉलमों की जाँच करें

यहां छवि विवरण दर्ज करें

प्रत्येक विंडो में ओके पर क्लिक करें और आपका काम हो गया।


1
नोट: यह विकल्प उपलब्ध नहीं है यदि आपके पास पहले से डिज़ाइन दृश्य में तालिका खुली है। इसलिए डिजाइन टैब को करने से पहले बंद कर दें।
मूसफान

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
हालांकि यह कोड प्रश्न का उत्तर दे सकता है, लेकिन कुछ संदर्भों को शामिल करना बेहतर होगा, यह बताते हुए कि यह कैसे काम करता है और इसका उपयोग कब करना है। कोड-केवल उत्तर लंबे समय में उपयोगी नहीं हैं।
बोनो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.