SQL सर्वर प्रबंधन स्टूडियो में तालिका संपादन के बाद परिवर्तन सहेजना


265

यदि मैं किसी तालिका में कोई परिवर्तन सहेजना चाहता हूं, तो पहले SQL सर्वर प्रबंधन स्टूडियो में सहेजा गया (तालिका में कोई डेटा मौजूद नहीं है) मुझे एक त्रुटि संदेश मिलता है:

परिवर्तन सहेजने की अनुमति नहीं है। आपके द्वारा किए गए परिवर्तनों को निम्न तालिकाओं को छोड़ने और फिर से बनाने की आवश्यकता होती है। आपने या तो एक तालिका में परिवर्तन किया है जिसे फिर से नहीं बनाया जा सकता है या विकल्प को सक्षम किया जा सकता है बचत परिवर्तनों को रोकें जिनके लिए तालिका को फिर से बनाया जाना आवश्यक है।

तालिका को आसानी से संपादित करने से क्या रोका जा सकता है? या, संपादन के लिए तालिका बनाने के लिए SQL सर्वर प्रबंधन स्टूडियो के लिए यह सामान्य तरीका है? यह क्या है - यह "विकल्प परिवर्तनों को सहेजना रोकें" ?



1
@Pang - यह सवाल पहले आया, यह डुप्लिकेट है।
ग्रैंडमास्टरफ्लश


@Pang - मुझे नहीं पता था कि, धन्यवाद।
ग्रैंडमास्टरफ्लश

जवाबों:


573

टूल्स में जाएं -> विकल्प -> डिजाइनर-> "री-क्रिएशन की आवश्यकता वाले परिवर्तनों को रोकें" को अनचेक करें। देखा।

ऐसा इसलिए होता है क्योंकि कभी-कभी किसी चीज को बदलने के लिए एक टेबल को गिराना और फिर से बनाना जरूरी होता है। इसमें कुछ समय लग सकता है, क्योंकि सभी डेटा को एक अस्थायी तालिका में कॉपी किया जाना चाहिए और फिर नई तालिका में फिर से डाला जाना चाहिए। चूंकि डिफ़ॉल्ट रूप से SQL सर्वर आपको भरोसा नहीं करता है, इसलिए आपको "ठीक है, मुझे पता है कि मैं क्या कर रहा हूं, यह कहने की जरूरत है, अब मुझे अपना काम करने दें।"


8
Microsoft समर्थन साइट इसे हतोत्साहित करती है, लेकिन यदि आपके पास तालिका में कोई डेटा नहीं है, तो मुझे नुकसान नहीं दिखता है। परिवर्तनों को करने के लिए संभवतः TSQL का उपयोग करना सबसे अच्छा है।
जॉन स्मोक

6
मैं व्यक्तिगत रूप से महत्वपूर्ण डेटाबेस के लिए डिजाइनर का उपयोग करके हतोत्साहित करूंगा। मैंने देखा है कि यह कई मौकों पर महंगी गलतियाँ करता है। इसके अलावा, यह आलसी विकास की आदतों को बढ़ावा देता है और लोगों को डेटाबेस संरचना को संशोधित करने की अनुमति देता है जो ऐसा करने के लिए पर्याप्त कुशल नहीं हो सकते हैं यदि वे SQL कोड मार्ग का प्रबंधन नहीं कर सकते हैं।
मार्क डब्ल्यू डिक्सन

5
सहमत, मार्क, अभी तक शुरुआती विकास में मुझे स्क्रिप्ट के ढेर को लिखने की आवश्यकता नहीं है।
क्रिस्टोफर

7
यह चौंकाने वाली बात है कि यह सितंबर 2016 है, और यह अविश्वसनीय उपयोगकर्ता-अनधिकृत त्रुटि (पूछने के लिए कोई विकल्प नहीं है "अरे, क्या आप तालिका परिवर्तन करना चाहेंगे?") अभी भी खेल में है। नहीं, आपको बस एक रद्द करें बटन मिलता है, और आपको फिर से अपने बदलाव करने होंगे। SQL सर्वर यह सबसे बेवकूफ है।
माइक गल्डहिल

2
2019 से @ मायके ग्रील्डहिल ग्रीटिंग्स और यह अभी भी मामला है
कप्तान केनपाची

116

उपकरण> विकल्प

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

ऊपर दिए गए विकल्प को अनचेक करें


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

2
आपके द्वारा इस विकल्प को बदलने के बाद सबसे अच्छा अभ्यास ऊपरी विकल्प 'डेटा जनरेट करने के लिए ऑटो उत्पन्न परिवर्तन स्क्रिप्ट' की जाँच करना है
9

छवि के लिए धन्यवाद। यह बहुत उपयोगी है :)
M A.

72

इस समस्या को हल करने के लिए, तालिका के मेटाडेटा संरचना में परिवर्तन करने के लिए SQL कथनों का उपयोग करें।

यह समस्या तब होती है जब "परिवर्तन सहेजना आवश्यक है जिसमें तालिका पुन: निर्माण की आवश्यकता होती है" विकल्प सक्षम है।

स्रोत: त्रुटि संदेश जब आप SQL Server 2008 में एक तालिका को सहेजने का प्रयास करते हैं: "परिवर्तन सहेजना अनुमत नहीं है"


12
मेरा सवाल यहाँ है: SQL सर्वर हर एक बदलाव के लिए तालिका को छोड़ने और पुन: बनाने के बजाय आवश्यक T-SQL कथनों का उपयोग क्यों नहीं करता है? मैं इस व्यवहार को समझ नहीं सकता।
Jaime

15

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


2
ए) आप स्क्रिप्ट को कॉपी कर सकते हैं एसएसएमएस उत्पन्न करता है और इसे अपने उत्पादन पर्यावरण पर उपयोग करता है। बी) एसएसएमएस अक्सर आसान, तेज और सुरक्षित होता है क्योंकि एसएसएमएस आपके लिए सभी विवरणों को संभालता है।
ट्रिस्पेड

2
यह अभी भी एक बहुत बुरा विचार है। आप उत्पादों पर 10,000, 000 रिकॉर्ड तालिका को फिर से बनाना नहीं चाहते हैं। यह तेज नहीं है। यह कैसे सुरक्षित है? खराब डेटा खराब डेटा है और यदि आप एक स्क्रिप्ट का उपयोग करते हैं, जिसे आपने SSMS को लिखने दिया है, तो आप एक चेक का उपयोग करते हैं। यह 100% मामलों में POOR प्रथा है।
एचएलजीईएम

15

SSMS पर जाएं और यह प्रयास करें

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

यहाँ इस पर एक बहुत अच्छी व्याख्या की गई है: http://blog.sqlauthority.com/2009/05/18/sql-server-fix-management-studio-error-saving-changes-in-not-perpret-the-changes -आप-है निर्मित-आवश्यकता-निम्न-टेबल-टू-जा गिरा और फिर से बनाया-यू-है-या तो निर्मित-परिवर्तन करने के लिए एक-टैब /


14

SQL सर्वर प्रबंधन स्टूडियो में टेबल एडिटर में कई बदलाव आप बहुत आसानी से और नेत्रहीन रूप से कर सकते हैं, वास्तव में बैकग्राउंड में टेबल को ड्रॉप करने और इसे फिर से बनाने के लिए SSMS की आवश्यकता होती है। यहां तक ​​कि स्तंभों को फिर से व्यवस्थित करने जैसी सरल चीजें भी मानक SQL DDL कथन में व्यक्त नहीं की जा सकती हैं - सभी SSMS कर सकते हैं ड्रॉप और तालिका को फिर से बना सकते हैं।

यह ऑपरेशन एक बड़े टेबल पर बहुत समय लेने वाला हो सकता है, या बी) विभिन्न कारणों से भी विफल हो सकता है (जैसे कि एफके बाधाओं और सामान)। इसलिए, SQL Server 2008 में SSMS ने बताया कि नए विकल्प अन्य उत्तरों की पहले ही पहचान कर चुके हैं।

इस तरह के बदलावों को रोकने के लिए पहली बार में यह सहज ज्ञान युक्त लग सकता है - और यह निश्चित रूप से एक देव सर्वर पर एक उपद्रव है। लेकिन एक उत्पादन सर्वर पर, यह विकल्प और इस तरह के परिवर्तनों को रोकने का डिफ़ॉल्ट मूल्य एक संभावित जीवन रक्षक बन जाता है!


2
मैं अब एक विकास सर्वर पर हूं, लेकिन एक उत्पादन पर मैं इसे वापस चालू करने के लिए सुनिश्चित करूंगा। के लिए एक बार फिर से साझा करने के अनुभव के लिए धन्यवाद
रेम

1
लेकिन, उदाहरण के लिए, 100 से 120 तक एक nvarchar कॉलम के आकार को बदलना बहुत सीधा ऑपरेशन है जो आसानी से ALTER TABLE के साथ किया जा सकता है ... फिर, SQL सर्वर (प्रबंधन स्टूडियो) को क्यों छोड़ दिया जाता है और इसके लिए तालिका को फिर से बनाया जाता है। मामलों?
Jaime

4
@ जय: कि आपको उस विज़ुअल डिज़ाइनर के डेवलपर्स से पूछने की ज़रूरत है - कोई और नहीं जानता। यह सिर्फ एक तथ्य है - दृश्य डिजाइनर के साथ, तालिका को फिर से बनाने और चारों ओर नकल करके कई सीधे बदलाव हमेशा किए जाएंगे। यदि आप सीधे दृष्टिकोण का उपयोग करना चाहते हैं, तो यह आपके ऊपर है कि आप कुछ आसान टी-एसक्यूएल स्टेटमेंट लिखकर और उन्हें निष्पादित करके खुद को संभाल लें।
marc_s

1
थैंक यू @marc_s यह ठीक वही जवाब है जिसकी मैं उम्मीद कर रहा था, हालाँकि मुझे उन पर बहुत कम विश्वास था जो एक छिपी हुई वजह थी जो इसे
समझाएगी

1
यह प्रतिबंध वस्तु आईडी को आपके जाने बिना बदलने से रोकता है (यदि आपको जरूरत है कि ऐसा न हो)।
ट्रिस्पेड

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