2011-06-01 11 views
11

पर पहचान न करें कृपया कोई मुझे बताएं कि क्या तालिका निर्माण पर IDENTITY NOT NULL निर्देश अनावश्यक है या नहीं? मेरा मतलब है, संदेशटेबल निर्माण

DEFAULT या NULL को स्पष्ट पहचान मूल्यों के रूप में अनुमति नहीं है।

मैं कहूंगा कि IDENTITY के रूप में घोषित कोई भी स्तंभ पूरी तरह से NOT NULL के रूप में घोषित किया गया है, लेकिन मैं यह सुनिश्चित करना चाहता हूं। क्या कोई कृपया पुष्टि कर सकता है?

बहुत बहुत धन्यवाद।

+0

प्रश्न हो सकता है, लगता है उत्पन्न करता है "कुछ निहित है, तो स्पष्ट रूप से इसे 'निरर्थक' घोषित किया गया है?" जवाब व्यक्तिपरक प्रतीत होता है। 'प्राथमिक कुंजी' अनावश्यक वाले कॉलम पर 'नॉट नल' घोषित कर रहा है? यदि 'कोई कार्रवाई' संदर्भित कार्रवाई हमेशा अनावश्यक नहीं है, तो यह बिल्कुल क्यों मौजूद है? – onedaywhen

उत्तर

8

एसक्यूएल सर्वर पहचान कॉलम के लिए शून्य बाधा नहीं कहते हैं स्वचालित रूप से eventhough वह जब एक मेज बनाने यह speficy नहीं किया

निम्न तालिका स्क्रिप्ट

create table test(id int identity(1,1), name varchar(1000)) 

पर विचार करें अब प्रबंधन स्टूडियो से तालिका के स्क्रिप्ट उत्पन्न । यह स्क्रिप्ट को

CREATE TABLE [dbo].[test](
    [id] [int] IDENTITY(1,1) NOT NULL, 
    [name] [varchar](1000) NULL 
) ON [PRIMARY] 

घटनाक्रम डिफ़ॉल्ट रूप से तालिका स्क्रिप्ट में डिफ़ॉल्ट बाधा निर्दिष्ट नहीं है। पहचान कॉलम कभी भी पूर्ण नहीं होगा। इसलिए नल बाधा को डिफ़ॉल्ट

+1

यदि आप न्यूल या नॉट न्यूल निर्दिष्ट नहीं करते हैं, तो SQL एक पहचान कॉलम को न्यूल के रूप में सेट करेगा। मैं, मैं हमेशा 'SET ANSI_NULL_DFLT_OFF' और 'SET ANSI_NULL_DFLT_ON' आदेशों के अस्तित्व के लिए भ्रमित भ्रम से बचने के लिए इसे निर्दिष्ट करता हूं। –

1

SQL सर्वर (2008, और शायद पहले के संस्करण भी) को एक पूर्ण कॉलम पर पहचान कॉलम बनाने की अनुमति नहीं देगा। यह प्रयास करें:

CREATE TABLE Foo1 
(
    FooId int identity not null 
    ,Data varchar(20) not null 
) 

काम करता है, जहां

CREATE TABLE Foo2 
(
    FooId int identity null 
    ,Data varchar(20) not null 
) 

त्रुटि संदेश Could not create IDENTITY attribute on nullable column 'FooId', table 'Foo2'.

+0

आखिरकार आपके उत्तर का अर्थ यह है कि न्यूल न कि अंतर्निहित है। :) –

+1

हाँ, मुझे एहसास हुआ कि बाद में, @ प्रणय की पोस्ट पर टिप्पणी जोड़ने के बाद। कोडिंग पर मेरा समग्र लेना हमेशा "अंतर्निहित कोड" का उपयोग करने से बचाना है। कभी भी यह न मानें कि एसक्यूएल जो भी आपको लगता है वह करेगा ** ** करना चाहिए, लेकिन कंप्यूटर पर दिए गए निर्देशों में स्पष्ट होने के लिए अतिरिक्त प्रयास करें (कहें, "शून्य नहीं" में टाइप करना)। –

संबंधित मुद्दे