2012-05-23 23 views
80

मेरे पास एक मौजूदा तालिका है जिसे मैं उड़ाने वाला हूं क्योंकि मैंने इसे ID कॉलम सेट के साथ तालिका की पहचान कॉलम के रूप में नहीं बनाया है।पहचान कॉलम के साथ तालिका कैसे बनाएं

एसक्यूएल सर्वर प्रबंधन स्टूडियो का उपयोग करना, मैं पटकथा एक करने के लिए बनाए ... मौजूदा तालिका के और यह मिल गया:

CREATE TABLE [dbo].[History](
    [ID] [int] NOT NULL, 
    [RequestID] [int] NOT NULL, 
    [EmployeeID] [varchar](50) NOT NULL, 
    [DateStamp] [datetime] NOT NULL, 
CONSTRAINT [PK_History] 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] 
) ON [PRIMARY] 

मेरा प्रश्न है, मैं कैसे इस एसक्यूएल को संशोधित करेगा ताकि मेरे जिसके परिणामस्वरूप तालिका कॉलम पहचान के रूप में सेट है?

+11

[आईडी] [int] नल पहचान नहीं (1,1) – Li0liQ

उत्तर

114
CREATE TABLE [dbo].[History](
    [ID] [int] IDENTITY(1,1) NOT NULL, 
    [RequestID] [int] NOT NULL, 
    [EmployeeID] [varchar](50) NOT NULL, 
    [DateStamp] [datetime] NOT NULL, 
CONSTRAINT [PK_History] 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] 
+0

मेरा मानना ​​है कि मैं यही देख रहा था। मुझे 'PK_History' मान को 'आईडी' या कुछ भी बदलने की आवश्यकता नहीं है? – jp2code

+0

कोई भी आपकी आवश्यकता नहीं होनी चाहिए, PK_History केवल बाधा का नाम है, प्राथमिक कुंजी बाधा कॉलम आईडी पर पहले से ही – Gratzy

+0

पैरामीटर पहचान का अर्थ क्या है (1,1) – otc

9
[id] [int] IDENTITY(1,1) NOT NULL, 

निश्चित रूप से जब आप SQL सर्वर प्रबंधन स्टूडियो में तालिका बना रहे हैं तो आप पहचान विनिर्देश सेट करने के लिए तालिका डिज़ाइनर का उपयोग कर सकते हैं।

enter image description here

+1

ठीक है, धन्यवाद फिल। मुझे पता है कि यह कैसे करना है, लेकिन मैं नहीं कर सकता क्योंकि तालिका पहले से मौजूद है। मुझे टेबल को हटाना होगा और इसे फिर से बनाना होगा, इसलिए मैं स्क्रिप्ट का उपयोग क्यों कर रहा हूं। – jp2code

+4

@ jp2code: मेरा मतलब था कि आप एक पहचान कॉलम के साथ एक टेस्ट टेबल बना सकते थे और फिर स्क्रिप्ट किया था कि यह देखने के लिए कि इसे कैसे निर्दिष्ट किया जाना चाहिए। – Phil

29

यह पहले से ही उत्तर दिया गया है, लेकिन मुझे लगता है कि सबसे सरल वाक्य रचना है:

CREATE TABLE History (
    ID int primary key IDENTITY(1,1) NOT NULL, 
    . . . 

अधिक जटिल बाधा सूचकांक उपयोगी है जब आप वास्तव में विकल्प बदलना चाहते हैं।

वैसे, मैं इस तरह के कॉलम इतिहास आईडी नाम देना पसंद करता हूं, इसलिए यह विदेशी कुंजी संबंधों में कॉलम के नाम से मेल खाता है।

+4

ओपी विशेष रूप से एक जीयूआई उपकरण के आउटपुट के साथ काम कर रहा है जो मौजूदा के लिए डीडीएल आउटपुट करता है वस्तु। उस उपकरण में शायद नहीं है, "यदि संभव हो तो सरल वाक्यविन्यास का उपयोग करें" विकल्प। ओपी की विशिष्ट स्थिति के लिए कम त्रुटि प्रवण, उत्पन्न डीडीएल में एक पंक्ति को संपादित करना होगा, और सरलतम वाक्यविन्यास का उपयोग करके इसे स्क्रैच से लिखने की कोशिश नहीं करेगा। इसके अलावा आपके द्वारा दिया गया उदाहरण पीके बाधा को ओपी के रूप में नाम नहीं देता है।कई लोग मेरी बाधाओं को पसंद करते हैं ताकि उनके पास सभी वातावरण (देव, परीक्षण, प्रोड) में समान नाम हो। 'आईडी int बाधा PK_History प्राथमिक कुंजी पहचान (1,1) 'मुझे विश्वास है। –

+3

शायद, शायद नहीं। मैं उन परिस्थितियों में रहा हूं जहां मैंने एक डेटाबेस से स्क्रिप्ट ली है, इसे किसी अन्य सर्वर पर इस्तेमाल किया है, और एक स्थान पर काम करने वाले डिफ़ॉल्ट दूसरे के लिए सबसे अच्छे नहीं थे। किसी भी मामले में, मैंने केवल इसे समाधान के रूप में सुझाव दिया क्योंकि यह मेरे लिए आसान लगता है (मैं व्यक्तिगत रूप से "प्राथमिक कुंजी" कीवर्ड को एक बाधा पर विकल्पों को समझने से बेहतर समझता हूं और मैं उन विकल्पों का उपयोग करने पर विचार करता हूं जिन्हें मैं "बुरा नहीं समझता ")। हालांकि, आप एक अच्छा मुद्दा बनाते हैं कि एक और समाधान क्यों पसंद किया जा सकता है। मुझे जोड़ना चाहिए, वह जवाब पहले ही स्वीकार्य उत्तर है। –

-2

अद्वितीय कुंजी अधिकतम 2 न्यूल मानों की अनुमति देती है। Explaination:

create table teppp 
(
id int identity(1,1) primary key, 
name varchar(10)unique, 
addresss varchar(10) 
) 

insert into teppp (name,addresss) values ('','address1') 
insert into teppp (name,addresss) values ('NULL','address2') 
insert into teppp (addresss) values ('address3') 

select * from teppp 
null string , address1 
NULL,address2 
NULL,address3 

आप नीचे के रूप में एक ही मान डालने का प्रयास करें:

insert into teppp (name,addresss) values ('','address4') 
insert into teppp (name,addresss) values ('NULL','address5') 
insert into teppp (addresss) values ('address6') 

हर बार जब आप की तरह त्रुटि प्राप्त होगी: अनन्य KEY प्रतिबंध

उल्लंघन 'UQ__teppp__72E12F1B2E1BDC42'। ऑब्जेक्ट 'dbo.teppp' में डुप्लिकेट कुंजी सम्मिलित नहीं कर सकता।
कथन समाप्त कर दिया गया है।

+0

मुझे 'आईडी' कॉलम ** अद्वितीय ** बनाने की आवश्यकता है, न कि' नाम' कॉलम। आपने 'नाम' कॉलम में ** अद्वितीय ** बाधा क्यों डाली है? यह आपके 'teppp' तालिका में आपको कैसे लाभ पहुंचाता है? – jp2code

+0

क्यू के यहां बिल्कुल जवाब नहीं है –

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