2008-09-17 14 views
11

के साथ तालिका बनाते हैं, मैं SQL सर्वर में एक तालिका बनाना चाहता हूं जो एक ऑटो वृद्धिशील प्राथमिक कुंजी डालने पर, जोड़ देगा। यह MySql auto_increment कार्यक्षमता के समान एक स्वत: संक्रमित आईडी होना चाहिए। (नीचे)SqlServer MySQL जैसे auto_increment प्राथमिक कुंजी

create table foo 
( 
user_id int not null auto_increment, 
name varchar(50) 
) 

क्या कोई सम्मिलित ट्रिगर बनाने के साथ ऐसा करने का कोई तरीका है?

उत्तर

21

इस

create table foo 
( 
user_id int not null identity, 
name varchar(50) 
) 
+0

यह प्रश्न का उत्तर नहीं है। यह स्वत: वृद्धि, प्राथमिक कुंजी मुद्दे को पूरी तरह से अनदेखा करता है।यह भी क्यों चिपकाया जाता है? –

1

की तरह क्षेत्र घोषित पहचान

0

के रूप में अन्य लोगों ने कहा, बस पहचान विकल्प सेट किया जाना है।

1

जैसा ऊपर बताया गया है, पहचान फ़ील्ड का उपयोग करें।

CREATE TABLE foo 
(
user_id int IDENTITY(1,1) NOT NULL, 
name varchar(50) 
) 
9

ओपी ने ऑटो वृद्धिित प्राथमिक कुंजी का अनुरोध किया। पहचानशब्द कीवर्ड स्वयं ही कॉलम को प्राथमिक कुंजी नहीं बनाता है।

CREATE TABLE user 
(
    TheKey int IDENTITY(1,1) PRIMARY KEY, 
    Name varchar(50) 
) 
+0

काफी सही, दूसरे को सही उत्तर के रूप में क्यों चुना जाता है? –

4

जैसा कि अन्य ने उल्लेख किया है: कॉलम में पहचान विशेषता जोड़ें, और इसे प्राथमिक कुंजी बनाएं।

हैं, तथापि, MSSQL की पहचान और MySQL के AUTO_INCREMENT के बीच मतभेद:

  • MySQL की आवश्यकता है कि एक अनूठा बाधा (अक्सर एक प्राथमिक कुंजी के रूप में) AUTO_INCREMENT स्तंभ के लिए परिभाषित किया।
    एमएसएसक्यूएल की ऐसी आवश्यकता नहीं है।
  • MySQL आपको मैन्युअल रूप से AUTO_INCREMENT कॉलम में मान डालने देता है।
    MSSQL आपको मानदंड कॉलम में मैन्युअल रूप से मूल्य डालने से रोकता है; यदि आवश्यक हो, तो आप सम्मिलित होने से पहले कमांड पर "SET IDENTITY_INSERT टैबलेटनाम" जारी करके ओवरराइड कर सकते हैं।
  • MySQL आपको AUTO_INCREMENT कॉलम में मान अपडेट करने की अनुमति देता है।
    एमएसएसएलएल पहचान कॉलम में मानों को अपडेट करने से इंकार कर देता है।
9

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

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