मैं एक अद्वितीय बाधा कैसे बना सकता हूं जो नल को भी अनुमति देता है?


619

मैं एक स्तंभ पर एक अद्वितीय बाधा रखना चाहता हूं जिसे मैं GUID के साथ आबाद करने जा रहा हूं। हालाँकि, मेरे डेटा में इस कॉलम के लिए शून्य मान हैं। मैं कई अशक्त मूल्यों की अनुमति देने वाले अवरोध कैसे बना सकता हूं?

यहाँ एक उदाहरण परिदृश्य है । इस स्कीमा पर विचार करें:

CREATE TABLE People (
  Id INT CONSTRAINT PK_MyTable PRIMARY KEY IDENTITY,
  Name NVARCHAR(250) NOT NULL,
  LibraryCardId UNIQUEIDENTIFIER NULL,
  CONSTRAINT UQ_People_LibraryCardId UNIQUE (LibraryCardId)
)

फिर इस कोड को देखें कि मैं क्या हासिल करने की कोशिश कर रहा हूं:

-- This works fine:
INSERT INTO People (Name, LibraryCardId) 
 VALUES ('John Doe', 'AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA');

-- This also works fine, obviously:
INSERT INTO People (Name, LibraryCardId) 
VALUES ('Marie Doe', 'BBBBBBBB-BBBB-BBBB-BBBB-BBBBBBBBBBBB');

-- This would *correctly* fail:
--INSERT INTO People (Name, LibraryCardId) 
--VALUES ('John Doe the Second', 'AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA');

-- This works fine this one first time:
INSERT INTO People (Name, LibraryCardId) 
VALUES ('Richard Roe', NULL);

-- THE PROBLEM: This fails even though I'd like to be able to do this:
INSERT INTO People (Name, LibraryCardId) 
VALUES ('Marcus Roe', NULL);

अंतिम कथन एक संदेश के साथ विफल होता है:

UNIQUE प्रमुख बाधा 'UQ_People_LibraryCardId' का उल्लंघन। डुप्लिकेट कुंजी को ऑब्जेक्ट 'dbo.People' में सम्मिलित नहीं किया जा सकता है।

मैं अपना स्कीमा और / या विशिष्टता अवरोध कैसे बदल सकता हूं ताकि यह NULLवास्तविक डेटा के लिए अद्वितीयता की जांच करते हुए कई मूल्यों की अनुमति दे सके ?


वोट देने के लिए मानक संगतता के लिए कनेक्ट समस्या: connect.microsoft.com/SQLServer/Feedback/Details/299229
वाद्ज़िम


अद्वितीय बाधाएं और NULLs की अनुमति दें। ? यह सामान्य ज्ञान है। यह संभव नहीं है
Flik

13
@flik, "सामान्य ज्ञान" का संदर्भ नहीं देता। यह कोई मान्य तर्क नहीं है। खासकर तब जब विचार nullएक मूल्य नहीं बल्कि मूल्य का अभाव हो। SQL मानक के अनुसार, के nullबराबर नहीं माना जाता है null। तो क्यों कई nullएक विशिष्टता का उल्लंघन होना चाहिए?
Frédéric

जवाबों:


144

SQL सर्वर 2008 +

आप एक अद्वितीय इंडेक्स बना सकते हैं जो एक WHEREक्लॉज़ के साथ कई NULL को स्वीकार करता है । देखें नीचे इस सवाल का जवाब

SQL सर्वर 2008 से पहले

आप एक UNIQUE बाधा नहीं बना सकते हैं और NULLs को अनुमति दे सकते हैं। आपको NEWID का डिफ़ॉल्ट मान सेट करना होगा ()।

मौजूदा मानों को NEWID () में अपडेट करें जहां UNIQUE बाधा बनाने से पहले NULL।


2
और यह पूर्वव्यापी रूप से मौजूदा पंक्तियों में मूल्यों को जोड़ देगा, यदि ऐसा है तो मुझे क्या करना है, धन्यवाद?
स्टुअर्ट

1
आपको मौजूदा मानों को NEWID () में स्थापित करने के लिए एक अद्यतन कथन चलाने की आवश्यकता होगी, जहां मौजूदा क्षेत्र IS NULL
जोस बेसिलियो

54
यदि आप SQL Server 2008 या उसके बाद का उपयोग कर रहे हैं, तो 100 से अधिक upvotes के साथ नीचे का उत्तर देखें। आप अपने विशिष्ट अवरोध के लिए WHERE क्लॉज जोड़ सकते हैं।
डैरेन ग्रिफिथ

1
यह बहुत ही समस्या ADO.NET DataTables को भी हिट करता है। इसलिए कि मैं इस पद्धति का उपयोग करके बैकिंग फ़ील्ड में नल की अनुमति दे सकता हूं, DataTable मुझे NULLs को पहली बार एक अद्वितीय कॉलम में संग्रहीत नहीं करने देगा। अगर किसी को इसके लिए एक समाधान पता है, तो कृपया इसे यहां
डॉटनेट

6
दोस्तों सुनिश्चित करें कि आप नीचे स्क्रॉल करें और 600 अपवोट्स के साथ उत्तर पढ़ें। यह अब केवल 100 से अधिक नहीं है।
चमकदार

1287

आप जो देख रहे हैं, वह वास्तव में एएनएसआई मानकों का हिस्सा है SQL: 92, SQL: 1999 और SQL: 2003, यानी एक UNIQUE बाधा को गैर-पूर्ण मानों को अस्वीकार करना चाहिए लेकिन कई NULL मानों को स्वीकार करना चाहिए।

हालांकि SQL सर्वर की Microsoft दुनिया में एक एकल NULL की अनुमति है, लेकिन कई NULLs नहीं हैं ...

में एसक्यूएल सर्वर 2008 , आपको लगता है कि शामिल नहीं NULLs एक विधेय के आधार पर एक अनूठा फ़िल्टर सूचकांक को परिभाषित कर सकते हैं:

CREATE UNIQUE NONCLUSTERED INDEX idx_yourcolumn_notnull
ON YourTable(yourcolumn)
WHERE yourcolumn IS NOT NULL;

पहले के संस्करणों में, आप बाधा को लागू करने के लिए NOT NULL विधेयकों के साथ VIEWS का सहारा ले सकते हैं।


3
यह शायद ऐसा करने का सबसे अच्छा तरीका है। सुनिश्चित नहीं हैं कि क्या कोई प्रदर्शन प्रभाव है? किसी को?
सिमोन_विवर

3
मैं SQL सर्वर 2008 एक्सप्रेस संस्करण में ठीक से ऐसा करने की कोशिश कर रहा हूं और मुझे निम्नानुसार एक त्रुटि मिलती है: क्रिएट UNIQUE NONCLUSTERED INDEX UC_MailingId ON [SLS-CP] .dbo.MasterFileEdry (MailingId) जहां MailingId में पूर्ण परिणाम नहीं हैं: Msg 156। लेवल 15, स्टेट 1, लाइन 3 कीवर्ड 'WHERE' के पास गलत सिंटैक्स। अगर मैं हटाता हूं जहां क्लॉज डीडीएल ठीक चलता है, लेकिन निश्चित रूप से, वह नहीं करता है जो मुझे इसकी आवश्यकता है। कोई विचार?
केनेथ बाल्ट्रिक

4
जब तक मैं गलत नहीं हूं, आप एक अद्वितीय सूचकांक से एक विदेशी कुंजी नहीं बना सकते हैं जैसे आप एक अद्वितीय बाधा को बंद कर सकते हैं। (जब मैंने कोशिश की तो कम से कम SSMS ने मुझ पर शिकायत की।) एक अशक्त स्तंभ होने में सक्षम होना अच्छा होगा जो हमेशा अद्वितीय (जब अशक्त न हो) एक विदेशी कुंजी संबंध का स्रोत हो।
22

8
सचमुच एक बेहतरीन जवाब। बहुत बुरा यह जवाब के रूप में स्वीकार किए जाते हैं द्वारा छिपाया गया था। यह समाधान लगभग मेरे ध्यान में नहीं आया, लेकिन यह अब मेरे कार्यान्वयन में चमत्कार की तरह काम करता है।
कोरल डो

2
SQL 2005 और नीचे के लिए एक अन्य विकल्प एक संगणित कॉलम उर्फ ​​"Nullbuster" चाल है। stackoverflow.com/a/191729/132461 यह आपको किसी अन्य दृश्य के साथ डेटाबेस को अव्यवस्थित करने से बचाता है, आपके पास बस इसके बजाय एक और कॉलम है - आमतौर पर नामांकित कॉलम-नलबस्टर यदि कॉलमनुमा वह है जिसे आप ANull nullable UNIQUE बनना चाहते हैं। ColumnA-Nullbuster पर एक UNIQUE सूचकांक (या व्यापार के इरादे को व्यक्त करने के लिए बाधा) डालें और यह ColumnA पर अद्वितीयता लागू करेगा
DanO

34

SQL सर्वर 2008 और ऊपर

बस एक अद्वितीय सूचकांक फ़िल्टर करें:

CREATE UNIQUE NONCLUSTERED INDEX UQ_Party_SamAccountName
ON dbo.Party(SamAccountName)
WHERE SamAccountName IS NOT NULL;

लोअर संस्करणों में, एक भौतिकीकृत दृश्य अभी भी आवश्यक नहीं है

SQL Server 2005 और उससे पहले के लिए, आप इसे बिना किसी दृश्य के कर सकते हैं। मैंने सिर्फ एक अनोखी बाधा जोड़ी है जैसे आप मेरी एक टेबल के लिए पूछ रहे हैं। यह देखते हुए कि मैं कॉलम में विशिष्टता चाहता हूं SamAccountName, लेकिन मैं कई NULLs की अनुमति देना चाहता हूं, मैंने एक भौतिककृत कॉलम के बजाय एक भौतिक कॉलम का उपयोग किया है:

ALTER TABLE dbo.Party ADD SamAccountNameUnique
   AS (Coalesce(SamAccountName, Convert(varchar(11), PartyID)))
ALTER TABLE dbo.Party ADD CONSTRAINT UQ_Party_SamAccountName
   UNIQUE (SamAccountNameUnique)

आपको बस गणना किए गए कॉलम में कुछ डालना होगा जो वास्तविक वांछित अद्वितीय कॉलम NULL होने पर पूरे तालिका में अद्वितीय की गारंटी होगी। इस स्थिति में, PartyIDएक पहचान स्तंभ है और संख्यात्मक होना कभी भी मेल नहीं खाएगा SamAccountName, इसलिए इसने मेरे लिए काम किया। आप अपनी स्वयं की विधि आज़मा सकते हैं - सुनिश्चित करें कि आप अपने डेटा के डोमेन को समझ रहे हैं ताकि वास्तविक डेटा के साथ अंतरंगता की कोई संभावना न हो। यह इस तरह एक विभेदक चरित्र प्रस्तुत करने के रूप में सरल हो सकता है:

Coalesce('n' + SamAccountName, 'p' + Convert(varchar(11), PartyID))

भले ही PartyIDकिसी दिन गैर-सांख्यिक बन गया हो और संयोग सेSamAccountName , अब इससे कोई फर्क नहीं पड़ेगा।

ध्यान दें कि गणना किए गए कॉलम सहित एक सूचकांक की उपस्थिति से प्रत्येक अभिव्यक्ति का परिणाम तालिका में अन्य डेटा के साथ डिस्क पर सहेजने का कारण बनता है, जो अतिरिक्त डिस्क स्थान लेता है।

ध्यान दें कि यदि आप एक सूचकांक नहीं चाहते हैं, तो आप अभी भी सीपीयू को कीवर्ड जोड़कर डिस्क पर पूर्व-निर्धारित किया जा सकता है PERSISTED कॉलम को एक्सप्रेशन के अंत में ।

SQL Server 2008 और ऊपर में, निश्चित रूप से फ़िल्टर किए गए समाधान का उपयोग करें यदि आप संभवतः कर सकते हैं!

विवाद

कृपया ध्यान दें कि कुछ डेटाबेस पेशेवर इसे "सरोगेट नल" के मामले के रूप में देखेंगे, जिसमें निश्चित रूप से समस्याएं हैं (ज्यादातर मुद्दों के कारण यह निर्धारित करने की कोशिश कर रहे हैं कि कुछ वास्तविक मूल्य है या लापता डेटा के लिए एक सरोगेट मूल्य है। , तो समस्याएँ भी हो सकती हैं; गैर-पूर्ण सरोगेट मूल्यों की संख्या के साथ पागल की तरह गुणा करना)।

हालांकि, मेरा मानना ​​है कि यह मामला अलग है। मेरे द्वारा जोड़ा गया गणना किया गया कॉलम कभी भी कुछ भी निर्धारित करने के लिए उपयोग नहीं किया जाएगा। इसका खुद का कोई मतलब नहीं है, और ऐसी कोई जानकारी नहीं है जो पहले से ही अन्य, ठीक से परिभाषित स्तंभों में अलग से नहीं मिली है। इसका चयन या उपयोग कभी नहीं किया जाना चाहिए।

तो, मेरी कहानी यह है कि यह एक सरोगेट NULL नहीं है, और मैं इसे चिपका रहा हूँ! चूंकि हम वास्तव में किसी भी उद्देश्य के लिए गैर-पूर्ण मूल्य नहीं चाहते हैं, इसके अलावा छल करने के लिएUNIQUE NULLs को अनदेखा करने के अनुक्रमणिका को छलने के , इसलिए हमारे उपयोग के मामले में सामान्य सरोगेट NULL निर्माण के साथ आने वाली समस्याओं में से कोई भी नहीं है।

सभी ने कहा, मुझे इसके बजाय अनुक्रमित दृश्य का उपयोग करने में कोई समस्या नहीं है - लेकिन यह कुछ मुद्दों को साथ लाता है जैसे कि उपयोग करने की आवश्यकता SCHEMABINDING। अपने बेस टेबल में एक नया कॉलम जोड़ने का आनंद लें (आपको कम से कम सूचकांक को छोड़ना होगा, और फिर दृश्य को छोड़ना होगा या स्कीमा बाध्य नहीं होने के लिए दृश्य को बदलना होगा)। SQL सर्वर (2005) (बाद के संस्करण), (2000) में अनुक्रमित दृश्य बनाने के लिए आवश्यकताओं की पूरी (लंबी) सूची देखें

अपडेट करें

यदि आपका कॉलम संख्यात्मक है, तो यह सुनिश्चित करने की चुनौती हो सकती है कि अद्वितीय अवरोध का उपयोग करने Coalesceसे टकराव नहीं होता है। उस मामले में, कुछ विकल्प हैं। एक नकारात्मक संख्या का उपयोग करने के लिए हो सकता है, "सरोगेट NULLs" को केवल नकारात्मक सीमा में डालने के लिए, और "वास्तविक मान" केवल सकारात्मक सीमा में। वैकल्पिक रूप से, निम्न पैटर्न का उपयोग किया जा सकता है। तालिका में Issue(जहां IssueIDहै PRIMARY KEY), वहाँ हो सकता है या नहीं भी हो सकता है TicketID, लेकिन अगर वहाँ एक है, तो यह अद्वितीय होना चाहिए।

ALTER TABLE dbo.Issue ADD TicketUnique
   AS (CASE WHEN TicketID IS NULL THEN IssueID END);
ALTER TABLE dbo.Issue ADD CONSTRAINT UQ_Issue_Ticket_AllowNull
   UNIQUE (TicketID, TicketUnique);

यदि अंक 1 में टिकट 123 है, तो UNIQUEअवरोध मूल्यों (123, NULL) पर होगा। यदि अंक 2 में कोई टिकट नहीं है, तो यह (NULL, 2) पर होगा। कुछ विचार से पता चलेगा कि इस बाधा को तालिका में किसी भी पंक्ति के लिए दोहराया नहीं जा सकता है, और फिर भी कई NULLs की अनुमति देता है।


16

उन लोगों के लिए जो Microsoft SQL Server Manager का उपयोग कर रहे हैं और एक अनोखा लेकिन अशक्त सूचकांक बनाना चाहते हैं, आप अपना विशिष्ट सूचकांक बना सकते हैं जैसा कि आप सामान्य रूप से अपने नए सूचकांक के लिए अपने सूचकांक गुण में, बाएं हाथ के पैनल से "फ़िल्टर" चुनें, फिर दर्ज करें आपका फ़िल्टर (जो आपका क्लॉज़ है)। इसे कुछ इस तरह पढ़ना चाहिए:

([YourColumnName] IS NOT NULL)

यह MSSQL 2012 के साथ काम करता है


Microsoft SQL सर्वर प्रबंधन स्टूडियो के तहत फ़िल्टर्ड इंडेक्स कैसे बनाया जाता है, यहाँ वर्णित है और पूरी तरह से काम करता है: msdn.microsoft.com/en-us/library/cc280372.aspx
Jan

9

जब मैंने नीचे अद्वितीय सूचकांक लागू किया:

CREATE UNIQUE NONCLUSTERED INDEX idx_badgeid_notnull
ON employee(badgeid)
WHERE badgeid IS NOT NULL;

नीचे दिए गए त्रुटि के साथ प्रत्येक गैर नल अद्यतन और सम्मिलित करना विफल रहा:

अद्यतन विफल रहा क्योंकि निम्न सेट विकल्पों में गलत सेटिंग्स हैं: 'ARITHABORT'।

मैंने इसे MSDN पर पाया

जब आप कंप्यूटेड कॉलम या इंडेक्स किए गए विचारों पर इंडेक्स बना रहे हों या बदल रहे हों, तब सेट पर होना चाहिए। यदि SET ARITHABORT बंद है, तो बनाएँ, अद्यतन करें, सम्मिलित करें, और गणना किए गए स्तंभों या अनुक्रमित दृश्यों पर अनुक्रमित वाले तालिकाओं पर DELETE कथन विफल हो जाएंगे।

इसलिए इसे सही ढंग से काम करने के लिए मैंने ऐसा किया

राइट क्लिक [डेटाबेस] -> गुण -> विकल्प -> अन्य विकल्प -> मिसिसियस -> अंकगणितीय गर्भपात - - सच

मेरा मानना ​​है कि कोड का उपयोग करके इस विकल्प को सेट करना संभव है

ALTER DATABASE "DBNAME" SET ARITHABORT ON

लेकिन मैंने इसका परीक्षण नहीं किया है


6

एक दृश्य बनाएं जो केवल गैर- NULLकॉलम का चयन करता है और UNIQUE INDEXदृश्य पर बनाता है :

CREATE VIEW myview
AS
SELECT  *
FROM    mytable
WHERE   mycolumn IS NOT NULL

CREATE UNIQUE INDEX ux_myview_mycolumn ON myview (mycolumn)

ध्यान दें कि आपको प्रदर्शन करने INSERTकी आवश्यकता होगी औरUPDATE की मेज के बजाय दृश्य पर।

आप इसे INSTEAD OFट्रिगर के साथ कर सकते हैं:

CREATE TRIGGER trg_mytable_insert ON mytable
INSTEAD OF INSERT
AS
BEGIN
        INSERT
        INTO    myview
        SELECT  *
        FROM    inserted
END

तो क्या मुझे दृश्य में सम्मिलित करने के लिए अपनी दाल को बदलने की आवश्यकता है?
स्टुअर्ट

1
आप INSERT का एक ट्रिगर INSTEAD बना सकते हैं।
क्वासोई

6

यह डिजाइनर में भी किया जा सकता है

इस विंडो को प्राप्त करने के लिए Index> Properties पर राइट क्लिक करें

कब्जा


बहुत अच्छा विकल्प अगर आपके पास डिजाइनर तक पहुंच है
फ्रांसिस्को

हालाँकि, जैसा कि मैंने अभी-अभी खोजा है, एक बार आपकी तालिका में डेटा होने के बाद, आप डिज़ाइनर का उपयोग नहीं कर सकते। यह फिल्टर को अनदेखा करने का प्रयास करता है और किसी भी प्रयास किए गए टेबल अपडेट "डुप्लीकेट कुंजी की अनुमति नहीं है" संदेश के साथ मिलते हैं
मोर्टिमरकट

4

क्लस्टर किए गए अनुक्रमित दृश्य पर एक अद्वितीय बाधा बनाना संभव है

आप इस तरह से व्यू बना सकते हैं:

CREATE VIEW dbo.VIEW_OfYourTable WITH SCHEMABINDING AS
SELECT YourUniqueColumnWithNullValues FROM dbo.YourTable
WHERE YourUniqueColumnWithNullValues IS NOT NULL;

और इस तरह की अनूठी बाधा:

CREATE UNIQUE CLUSTERED INDEX UIX_VIEW_OFYOURTABLE 
  ON dbo.VIEW_OfYourTable(YourUniqueColumnWithNullValues)

2

शायद एक " INSTEAD OF" ट्रिगर पर विचार करें और खुद की जांच करें? लुकअप को सक्षम करने के लिए कॉलम पर एक गैर-संकुल (गैर-अद्वितीय) सूचकांक के साथ।


1

जैसा कि पहले कहा गया है, SQL सर्वर ANSI मानक को लागू नहीं करता है जब यह आता है UNIQUE CONSTRAINT। 2007 से इसके लिए Microsoft Connect पर एक टिकट है । जैसा कि वहां पर सुझाव दिया गया है और यहाँ पर आज के रूप में सबसे अच्छा विकल्प एक फ़िल्टर किए गए इंडेक्स का उपयोग करना है जैसा कि किसी अन्य उत्तर या एक गणना किए गए कॉलम में बताया गया है , जैसे:

CREATE TABLE [Orders] (
  [OrderId] INT IDENTITY(1,1) NOT NULL,
  [TrackingId] varchar(11) NULL,
  ...
  [ComputedUniqueTrackingId] AS (
      CASE WHEN [TrackingId] IS NULL
      THEN '#' + cast([OrderId] as varchar(12))
      ELSE [TrackingId_Unique] END
  ),
  CONSTRAINT [UQ_TrackingId] UNIQUE ([ComputedUniqueTrackingId])
)

1

आप एक INSTEAD OF बना सकते हैं विशिष्ट स्थितियों और त्रुटि के लिए जाँच करने के लिए ट्रिगर का । एक सूचकांक बनाना बड़े तालिकाओं पर महंगा हो सकता है।

यहाँ एक उदाहरण है:

CREATE TRIGGER PONY.trg_pony_unique_name ON PONY.tbl_pony
 INSTEAD OF INSERT, UPDATE
 AS
BEGIN
 IF EXISTS(
    SELECT TOP (1) 1 
    FROM inserted i
    GROUP BY i.pony_name
    HAVING COUNT(1) > 1     
    ) 
     OR EXISTS(
    SELECT TOP (1) 1 
    FROM PONY.tbl_pony t
    INNER JOIN inserted i
    ON i.pony_name = t.pony_name
    )
    THROW 911911, 'A pony must have a name as unique as s/he is. --PAS', 16;
 ELSE
    INSERT INTO PONY.tbl_pony (pony_name, stable_id, pet_human_id)
    SELECT pony_name, stable_id, pet_human_id
    FROM inserted
 END

-1

आप इसे एक UNIQUEबाधा के साथ नहीं कर सकते , लेकिन आप इसे एक ट्रिगर में कर सकते हैं।

    CREATE TRIGGER [dbo].[OnInsertMyTableTrigger]
   ON  [dbo].[MyTable]
   INSTEAD OF INSERT
AS 
BEGIN
    SET NOCOUNT ON;

    DECLARE @Column1 INT;
    DECLARE @Column2 INT; -- allow nulls on this column

    SELECT @Column1=Column1, @Column2=Column2 FROM inserted;

    -- Check if an existing record already exists, if not allow the insert.
    IF NOT EXISTS(SELECT * FROM dbo.MyTable WHERE Column1=@Column1 AND Column2=@Column2 @Column2 IS NOT NULL)
    BEGIN
        INSERT INTO dbo.MyTable (Column1, Column2)
            SELECT @Column2, @Column2;
    END
    ELSE
    BEGIN
        RAISERROR('The unique constraint applies on Column1 %d, AND Column2 %d, unless Column2 is NULL.', 16, 1, @Column1, @Column2);
        ROLLBACK TRANSACTION;   
    END

END

-1
CREATE UNIQUE NONCLUSTERED INDEX [UIX_COLUMN_NAME]
ON [dbo].[Employee]([Username] ASC) WHERE ([Username] IS NOT NULL) 
WITH (ALLOW_PAGE_LOCKS = ON, ALLOW_ROW_LOCKS = ON, PAD_INDEX = OFF, SORT_IN_TEMPDB = OFF, 
DROP_EXISTING = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF, ONLINE = OFF, 
MAXDOP = 0) ON [PRIMARY];

-1

यह कोड यदि यू टेक्स्टबॉक्स के साथ रजिस्टर फॉर्म बनाता है और इन्सर्ट और यूआर टेक्स्टबॉक्स खाली है और सबमिट बटन पर क्लिक करें।

CREATE UNIQUE NONCLUSTERED INDEX [IX_tableName_Column]
ON [dbo].[tableName]([columnName] ASC) WHERE [columnName] !=`''`;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.