7

मेरे पास SQL ​​सर्वर 2005 के तहत एक डेटाबेस है जो विलय प्रतिकृति के साथ चल रहा है। मैं कुछ एफके कॉलम को 'शून्य नहीं' के रूप में बदलना चाहता हूं क्योंकि उनके पास हमेशा मूल्य होना चाहिए। एसक्यूएल सर्वर मुझे ऐसा हालांकि दूँगी नहीं, तो इस यह क्या कहते हैं:कॉलम बाधा बदलना शून्य/नहीं शून्य = rowguid प्रतिकृति त्रुटि

  • असमर्थ तालिका संशोधित करने के लिए। विलय प्रतिकृति द्वारा उपयोग की जाने वाली पंक्तिगुर्म कॉलम पर डिफ़ॉल्ट बाधा को छोड़ना अमान्य है। स्कीमा परिवर्तन आंतरिक प्रतिकृति प्रक्रिया के निष्पादन के दौरान विफल रहा। सुधारात्मक कार्रवाई के लिए, अन्य त्रुटि संदेश देखें जो इस त्रुटि संदेश के साथ है। ट्रिगर में लेनदेन समाप्त हुआ। बैच निरस्त कर दिया गया है।

मैं कमी केवल एक और स्तंभ है कि एक FK के रूप में काम कर रहा है पर, सब पर rowguid स्तंभ पर बदलने की कोशिश नहीं कर रहा हूँ। अन्य कॉलम जिन्हें मैं शून्य नहीं करना चाहता हूं क्योंकि रिकॉर्ड उस जानकारी के बिना कोई समझ नहीं लेता है (यानी ग्राहक, ग्राहक नाम पर)।

प्रश्न: क्या प्रतिकृति को बंद किए बिना कॉलम को 'शून्य नहीं' करने के लिए अपडेट करने का कोई तरीका है फिर इसे फिर से चालू करना? क्या यह करने का यह सबसे अच्छा तरीका है - क्या मुझे इसके बजाय एक बाधा का उपयोग करना चाहिए?

उत्तर

8

स्पष्ट रूप से एसएसएमएस उन्हें छोड़कर और उन्हें पुनर्निर्मित करके तालिकाओं में परिवर्तन करता है। तो बस टी-एसक्यूएल कथन का उपयोग कर परिवर्तन करने की जरूरत है।

ALTER TABLE dbo.MyTable ALTER COLUMN MyColumn nvarchar(50) NOT NULL 
3

आप के रूप में बस अतिरिक्त स्तंभ जोड़ने के लिए विरोध छोड़ने के लिए और मेज फिर से बनाने के लिए, दिखेगा स्क्रिप्ट एसक्यूएल सर्वर प्रबंधन स्टूडियो के रूप में टी SQL कथन में अपने परिवर्तन की जरूरत है।

आपको अपने प्रकाशनों में नया कॉलम भी जोड़ना होगा।

कृपया ध्यान दें कि इस तरह से एक कॉलम बदलने से प्रतिकृति के प्रदर्शन के लिए हानिकारक हो सकता है। आप जिस तालिका में बदलाव कर रहे हैं उसके आकार पर आश्रित, बहुत सारे डेटा को दोहराया जा सकता है। इस बात पर विचार करें कि यद्यपि आपकी तालिका संशोधन एक ही कथन में किया जा सकता है, यदि 1 मिलियन पंक्तियां प्रभावित होती हैं तो सब्सक्राइबर पर 1 मिलियन अपडेट जेनरेट किए जाएंगे, जैसा कि आमतौर पर सोचा नहीं जाता है।

पर, प्रदर्शन दृष्टिकोण में सुधार हाथ .......

इस अभ्यास करने के लिए आप की जरूरत करने के लिए:

  1. अपने पूरे विन्यास बाहर को स्क्रिप्ट से बैकअप अपने प्रतिकृति वातावरण।
  2. दोनों प्रकाशकों पर प्रतिकृति से तालिका निकालें/सदस्य
  3. प्रत्येक प्रकाशक/सब्सक्राइबर पर कॉलम जोड़ें।
  4. प्रत्येक प्रकाशक/सब्सक्राइबर पर स्थानीय रूप से अद्यतन लागू करें।
  5. तालिका को प्रतिकृति में वापस जोड़ें।
  6. मान्य करें कि लेनदेन प्रतिकृति है।