तालिका बनाते समय एक डिफ़ॉल्ट बाधा कैसे जोड़ें? SQL सर्वर [बंद]


12

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

Create tblTest(
columns..
..
..
Gender int,
Constraint DF_tblTest_Gender Default 3 For Gender,
..
..
..
)

हालाँकि, मुझे डिफ़ॉल्ट बाधा के पास एक त्रुटि संदेश मिल रहा है,

'के लिए' के ​​पास 'गलत सिंटैक्स'


आप CREATE TABLE ...कथन के लिए आधिकारिक Microsoft SQL सर्वर प्रलेखन पर एक नज़र डाल सकते हैं । आपके पास एक बहुत ही बुनियादी वाक्यविन्यास त्रुटि है।
जॉन उर्फ ​​हॉट 2use

जवाबों:


20

आप बाधा इनलाइन को नाम दे सकते हैं:

CREATE TABLE tblTest(
  --
  --
  Gender int CONSTRAINT DF_tblTest_Gender DEFAULT 3,
  --
) ;

जैसा कि CREATE TABLEएमएसडीएन पृष्ठ दिखाता है:

DEFAULT

... SQL सर्वर के पुराने संस्करणों के साथ संगतता बनाए रखने के लिए, एक बाधा नाम को सौंपा जा सकता है DEFAULT

एक ही पृष्ठ में, हम पा सकते हैं कि केवल विकल्प <table_constraint>हैं PRIMARY KEY, FOREIGN KEYऔर CHECKबाधाएं:

< table_constraint > ::=  
  [ CONSTRAINT constraint_name ]   
{  
   { PRIMARY KEY | UNIQUE }  
       {   
         NONCLUSTERED (column [ ASC | DESC ] [ ,... n ])  
         | NONCLUSTERED HASH (column [ ,... n ] ) 
               WITH ( BUCKET_COUNT = bucket_count )   
       }   
    | FOREIGN KEY   
        ( column [ ,...n ] )   
        REFERENCES referenced_table_name [ ( ref_column [ ,...n ] ) ]   
    | CHECK ( logical_expression )   
}

इसलिए यदि आप एक डिफ़ॉल्ट बाधा जोड़ना चाहते हैं (नामकरण या नहीं) केवल तरीके इनलाइन या एक ALTER TABLEबयान के साथ कर रहे हैं ।


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

4
@ ध्रुवराज - यह संभव है क्योंकि यह उत्तर दिखाता है
मार्टिन स्मिथ

8

अन्य दो उत्तरों पर आपकी टिप्पणियों का दावा है कि "इनलाइन" बनाते समय आप एक डिफ़ॉल्ट बाधा का नाम नहीं दे सकते। दोनों उत्तर बताते हैं कि आप वास्तव में, इनलाइन बनाते समय बाधा के लिए एक नाम प्रदान कर सकते हैं। मैं परिणाम दिखाते हुए एक तीसरा उदाहरण जोड़ूंगा।

IF OBJECT_ID('dbo.Test') IS NOT NULL
DROP TABLE dbo.Test;
CREATE TABLE dbo.Test
(
    TestID int NOT NULL
        CONSTRAINT PK_Test --here I'm naming the primary key constraint!
        PRIMARY KEY CLUSTERED
        IDENTITY(1,1)
    , SomeData varchar(42) NOT NULL
        CONSTRAINT DF_Test_SomeData --this is the name of the default constraint!
        DEFAULT ('Carrie Fisher')
);

INSERT INTO dbo.Test DEFAULT VALUES;

यह डिफ़ॉल्ट बाधा का नाम दिखाता है DF_Test_SomeData:

SELECT TableName = t.name
    , ConstraintName = dc.name
FROM sys.default_constraints dc
    INNER JOIN sys.tables t ON dc.parent_object_id = t.object_id;

परिणाम:

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

SSMS में ऑब्जेक्ट एक्सप्लोरर को देखने से नाम पता चलता है:

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


2

आप default valueक्षेत्र की परिभाषा पर उपयोग कर सकते हैं ।

Create tblTest(
columns..
..
..
Gender int CONSTRAINT constraint_name DEFAULT 3,
..
..
..
)

या अन्य टेबल का उपयोग करें:

ALTER TABLE tblTest
ADD CONSTRAINT constraint_name 
DEFAULT 3
FOR Gender

मैं अपने अवरोध का नाम देना चाहता हूं, जो अगर मैं इनलाइन करता हूं तो यह संभव नहीं होगा। क्या इनलाइन का उपयोग किए बिना या टेबल स्टेटमेंट में फेरबदल करने का कोई तरीका है।
ध्रुव राज
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.