आइडेंटिटी कॉलम के साथ टेबल कैसे बनाएं


111

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

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

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]

मेरा प्रश्न यह SQLहै कि मैं इसे कैसे संशोधित करूंगा ताकि मेरी परिणामी तालिका में पहचान केID रूप में कॉलम सेट हो ?


11
[आईडी] [int] नहीं पूर्ण पहचान (
१११

जवाबों:


153
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]

1
मुझे विश्वास है कि मैं क्या देख रहा था। मुझे या कुछ भी PK_Historyमान बदलने की आवश्यकता नहीं है ID?
jp2code

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

1
मापदंडों का अर्थ क्या है IDENTITY (1,1)
otc

4
पहचान (बीज, वृद्धि) docs.microsoft.com/en-us/sql/t-sql/statements/…
Gratzy

33

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

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

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

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


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

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

@GordonLinoff: मेट, प्राथमिक कुंजी डिफ़ॉल्ट रूप से अशक्त नहीं है, तो आपको स्पष्ट रूप से यहां शून्य नहीं निर्दिष्ट करने की आवश्यकता क्यों है?
लर्नर

@सिखाने वाला । । । दोनों अड़चनें ओपी के कोड में थीं। NOT NULLअनावश्यक है।
गॉर्डन लिनॉफ़

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

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

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


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

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

-2

अद्वितीय कुंजी अधिकतम 2 NULL मानों की अनुमति देती है। 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')

हर बार आपको त्रुटि मिलेगी:

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


मुझे IDस्तंभ को अद्वितीय बनाने की आवश्यकता थी, स्तंभ की नहीं Name। आपने कॉलम में अद्वितीय बाधा क्यों जोड़ी है Name? आपकी tepppतालिका में यह आपको कैसे लाभ पहुंचाती है?
jp2code

1
यहाँ पर क्यू का जवाब नहीं
मार्टिन स्मिथ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.