2010-02-08 16 views
13

के साथ तालिका में प्राथमिक कुंजी जोड़ें मेरे पास SQL ​​Server 2005 में एक तालिका है जिसमें 10000054 रिकॉर्ड हैं; इन रिकॉर्ड्स को थोक सम्मिलन ऑपरेशन के माध्यम से डाला जाता है। तालिका में प्राथमिक कुंजी नहीं है और मैं एक चाहता हूं। यदि मैं तालिका की संरचना को संशोधित करने का प्रयास करता हूं, तो एक नया कॉलम जोड़कर, पीके, पहचान के साथ int के रूप में सेट किया गया है, प्रबंधन कंसोल मुझे चेतावनी देता है:कई रिकॉर्ड

"बड़ी मात्रा में डेटा वाले तालिकाओं में परिवर्तन काफी समय ले सकता है जबकि परिवर्तन सहेजे जा रहे हैं, तालिका डेटा सुलभ नहीं होगा। "

"।।। तालिका संशोधित करने में असमर्थ समय समाप्ति की अवधि समाप्त हो समय समाप्ति की अवधि बीत आपरेशन के पूरा होने या सर्वर से पहले प्रतिसाद नहीं दे रहा "

मैं चाहता हूँ एक पी:

तो त्रुटि आउटपुट मेरी मेज में

मैं इसे कैसे जोड़ सकता हूं?

उत्तर

8

सटीक स्कीमा के साथ एक नई तालिका बनाएं और इच्छित कॉलम को प्राथमिक कुंजी बनाएं। अब एक टेबल से दूसरे तालिका में रिकॉर्ड्स कॉपी करने के लिए चयन का चयन करें। पूरा होने पर पुरानी तालिका हटाएं और वांछित नाम पर इस नई तालिका का नाम बदलें।

+0

यह मेरे लिए अच्छा काम करता है। एक बेहतर तरीका हो सकता है, लेकिन यह एक त्वरित फिक्स था। – Induster

+0

मुझे लगता है कि पसंदीदा (और सबसे सरल) समाधान डिज़ाइन टाइमआउट सेटिंग बदल रहा है, जैसा कि [यहां एमएसडीएन में वर्णित है] (https://support.microsoft.com/en-us/kb/915849)। – Veverke

+0

हमेशा ऐसा करने की जगह नहीं होने की गारंटी दे सकता है। – Robino

2

SQL स्क्रिप्ट उत्पन्न करने और इसे SQL क्वेरी विंडो से जारी करने का प्रयास करें।

22

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

कि कच्चे एसक्यूएल (सुरक्षित रूप से एक लेन-देन में लिपटे) है जो आप, क्लिपबोर्ड में कॉपी कर सकते हैं (बटन शीर्ष छोड़ दिया है, या फ़ाइल> नया> वर्तमान कनेक्शन के साथ क्वेरी), यह पेस्ट एक नई क्वेरी के रूप में चलाने के लिए है कि अपने हाथ में ले प्रदान करता है में, सही डीबी का चयन करें और क्वेरी निष्पादित करें।

+0

इस तरह आप थोड़ी देर के लिए डिस्क स्थान से कम हो सकते हैं। – iMatoria

0

आप प्राथमिक कुंजी के साथ एक टेबल बना सकते हैं। जब बीसीपी के साथ डेटा डालें तो आप कॉलम मैप करने के लिए प्रारूप फ़ाइल का उपयोग कर सकते हैं। थोक प्रतिलिपि के लिए प्रारूप फ़ाइल एक अच्छा समाधान है। इस समाधान के साथ आप पहचान जानकारी के साथ डेटा डालें।

0

डेविड के जवाब से मैं आपको प्राथमिक कुंजी के लिए उपयुक्त कॉलम नहीं मिला हूं। इस मामले में आप तालिका के अंतिम स्तंभ के रूप में एक int पहचान जोड़ सकते हैं, थोक सम्मिलन काम जारी रहेगा।

चूंकि तालिका को थोक सम्मिलित करने के साथ लोड किया जाता है, तो सबसे अच्छा विकल्प तालिका को छोटा कर देगा (तालिका तालिका टीटीटीबीएल); इसे बदलें, आईडी जोड़ना (तालिका टीबीएल जोड़ें आईडी int पहचान प्राथमिक कुंजी) और थोक लोड जारी करें।

यदि आप तालिका को पुनर्निर्मित नहीं कर सकते हैं तो आप तालिका को बदलने के लिए स्टाम्प या परेशानी समाधान का उपयोग कर सकते हैं।

9

मुझे पता है कि यह पुराना है लेकिन मैं इसमें भाग गया और इसे एक अलग तरीके से हल किया। मान लें कि आप एसएसएमएस 2008 का उपयोग कर रहे हैं, आप टूल्स -> विकल्प

'डिजाइनर' के तहत 'टेबल और डेटाबेस डिजाइनर' के तहत, मान के बाद 'लेन-देन समय-आउट' को बदल सकते हैं। डिफ़ॉल्ट 30 है, 0 अनंत के लिए है। मूल्य बढ़ाने के बाद प्राथमिक कुंजी बनाने का प्रयास करें।

यह बहुत तेज़ हो जाता है; एक नया डीबी बनाना, डेटा की प्रतिलिपि बनाना, पुराने डीबी को हटाना और पुराने डीबी को नए डीबी का नाम बदलना।प्राथमिक कुंजी को लागू करने के बाद आप टाइमआउट को 30 पर भी सेट कर सकते हैं - यदि आप चाहें तो अपनी पसंद।

+1

एसएसएमएस 2008 आर 2 में, आप 'लेनदेन समय-आउट के बाद' सेट नहीं कर सकते हैं 0 = 0. –

+1

यह उत्तर माइक्रोसॉफ्ट की प्राथमिकता हो सकता है: https://support.microsoft.com/en-us/kb/915849 –

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