2009-09-02 7 views
5

मैं एसक्यूएल सर्वर 2005 तालिका में एक कॉलम को पहचानने के लिए पहचान (1,1)
संयोग से यह तालिका खाली है और कॉलम बदला जाना एक प्राथमिक कुंजी है।
यह कॉलम दो अन्य तालिकाओं के लिए भी एक विदेशी कुंजी है।
एसक्यूएल सर्वर सहायक संग्रह प्रक्रिया या कॉलम पहचान को बदलने के लिए उपयोगिता (1,1)

गूगलिंग के बाद मुझे पता चला कि आप कॉलम को संशोधित करने और इसे इंडेंटिटी कॉलम बनाने के लिए ऑल्टर टेबल सिंटैक्स का उपयोग नहीं कर सकते हैं।
# लिंक 1: How do I add the identity property to an existing column in SQL Server
लिंक # 2: Adding an identity to an existing column -SQL Server

मैं निर्भर तालिकाओं (उनमें से 2) विदेशी कुंजी (SSMS से स्क्रिप्ट उत्पन्न किया था) को हटाने की जाँच समाप्त हो गया तो मुख्य तालिका फिर फिर से गिर पहचान के साथ सांस लेना। (यहां नाम बदलने का विकल्प भी आजमा सकते हैं)
फिर पहले निर्भर दो तालिकाओं के लिए विदेशी कुंजी को फिर से बनाया।

लेकिन यह सब मैन्युअल काम, किसी भी स्क्रिप्ट या एसपी को आसान बनाने के लिए वहां था।

आदर्श रूप में इन सभी चरणों में इस तरह के एक स्क्रिप्ट/उपकरण/उपयोगिता के द्वारा किया जा जाएगा:

  1. चेक निर्भर टेबल कुंजी
  2. बढ़ाएँगे और इस
  3. के लिए विदेशी कुंजी स्क्रिप्ट ड्रॉप बढ़ाएँगे मुख्य तालिका के लिए स्क्रिप्ट
  4. मुख्य तालिका ड्रॉप करें (या तालिका के डेटा के नाम पर तालिका का नाम बदलें)
  5. फिर से बनाते पहचान स्तंभ के साथ तालिका सक्षम
  6. विदेशी कुंजी
    फिर से बनाते हैं

उत्तर

4

आप SSMS का उपयोग एक स्क्रिप्ट (एक तालिका संपादित करें, स्क्रिप्ट बचाने के लिए) उत्पन्न करने के लिए कर सकते हैं, लेकिन अन्यथा यह एक मैनुअल प्रक्रिया है जैसा कि आपने पहचाना है।

एसएसएमएस स्क्रिप्ट निर्भरताएं उठाएगी आदि। इस तरह के काम के लिए, मैं मूल स्क्रिप्ट उत्पन्न करने के लिए एसएसएमएस का उपयोग करता हूं, इसे थोड़ा सा पंप करता हूं, इसे सावधानी से चलाता हूं, फिर तुलनात्मक टूल का उपयोग करें (जैसे लाल गेट तुलना) एक सुरक्षित संस्करण उत्पन्न करने के लिए।

संपादित करें: The SSMS error is not an error, it's a safety check that can be switched off

+0

+1, टेबल/कॉलम/चाबियाँ/बाधाओं/आदि के साथ बदलने के लिए बहुत सी चीजें हैं। प्रत्येक के लिए उपयोगिता असंभव होगा। यही कारण है कि आप एक स्क्रिप्ट उत्पन्न करने के लिए जीयूआई का उपयोग कर सकते हैं –

+1

एसएसएमएस एक त्रुटि फेंकता है, यह पहला विकल्प था जिसकी मैंने कोशिश की थी। प्रश्न में उल्लेख किया जाना चाहिए था ... –

+0

लिंक के लिए धन्यवाद, एक आकर्षण की तरह काम करने के विकल्प को अक्षम करना। –

2

(। यह महज एक अधिक विवरण के साथ GBN पद के अनुसरण की है - यह इस चीज यह पता लगाने की कि सभी आसान नहीं है) (

ऐसा नहीं है असंभव इस, बस बहुत ही जटिल और बहुत ही मुश्किल सौभाग्य से, माइक्रोसॉफ्ट पहले से ही यह किया है करने के लिए एक उपयोगिता लिखने के लिए - अपनी बुलाया SSMS (या एसएमओ?) इस तरह के एक स्क्रिप्ट बनाने के लिए:।

  • वस्तु में। एक्सप्लोरर, डेटाबेस और तालिका में ड्रिल करें जिसे आप संशोधित करना चाहते हैं राइट क्लिक करें और डिज़ाइन

  • डिज़ाइन स्क्रीन में एक तालिका में इच्छित परिवर्तन करें। यह उचित रूप से सहज है।

  • पहचान संपत्ति को जोड़ने/निकालने के लिए, ऊपरी फलक में कॉलम का चयन करें, और निचले फलक/"कॉलम गुण" टैब में, "पहचान विशिष्टता" के अंतर्गत सेटिंग्स को विस्तृत और कॉन्फ़िगर करें।

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

मैं भी इस स्क्रिप्ट उत्पन्न करने के लिए (मैं बाद में संशोधित कि। - SSMS हमेशा सबसे कुशल कोड उत्पन्न नहीं करता) कर ऐसा करने के बाद, आप अपने परिवर्तनों को सहेजे बिना बाहर निकल सकते हैं - आप एक डीबी छोड़ने आप अपनी नई स्क्रिप्ट का परीक्षण कर सकते हैं।

+0

धन्यवाद, मुझे नहीं पता था कि मुझे विवरण जाना चाहिए ... – gbn

+0

मैं बहुत पहले दुर्घटना से इस सुविधा में ठोकर खाई थी। प्रारंभिक रूप से, इन लिपियों को उत्पन्न करने और समीक्षा करने से मुझे एसक्यूएल के बारे में बहुत कुछ सिखाया गया; बाद में इसने मुझे कई तरीकों से प्रेरित किया कि एसक्यूएल कैसे नहीं लिखना है। (मुझे लगता है कि एसएसएमएस द्वारा उत्पन्न कोड है - एसक्यूएल के साथ 7.0 के साथ संगत होना चाहिए, और शायद पहले?) –

+0

पहले से ही यह कोशिश की गई, वास्तव में यह पहली चीज थी जिसकी मैंने कोशिश की थी। मैं एक त्रुटि देता हूं "परिवर्तनों को सहेजने की अनुमति नहीं है, आपके द्वारा किए गए परिवर्तनों को निम्न तालिका को छोड़ने की आवश्यकता है ....... तालिका को फिर से बनाया जाना आवश्यक है" –

0
  1. ड्रॉप पी और निर्माण एक ही डेटाप्रकार स्तंभ
  2. स्तंभ के डेटा जो आप नया स्तंभ को पहचान स्थापित करना चाहते हैं कॉपी।
  3. पुराने कॉलम ड्रॉप
  4. रीसेट प्राथमिक कुंजी

ALTER तालिका UserRole ड्रॉप बाधा PK_XX ALTER तालिका XX

जोड़ें newX नहीं अशक्त पहचान (1,1) प्राथमिक कुंजी int

अद्यतन एक्सएक्स सेट newX = oldX

तालिका बदलें XX ड्रोप कॉलम एन oldX

पहचान कॉलम सेट करने का यह सबसे आसान तरीका है। यदि आप लंबी जेनरेट की गई स्क्रिप्ट का उपयोग नहीं करना चाहते हैं।

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