मैं SQL सर्वर डेटाबेस के टकराव को कैसे बदलूं?


16

मैं सभी डेटाबेस को एक एकल टकराव पर मानकीकृत करने की कोशिश कर रहा हूं - लैटिन 1_जनरल_सीआईएएएस (मानक टकराव)। मेरे पास कुछ डेटाबेस हैं जो SQL_Latin1_General_CP1_CI_AS में हैं।

मुझे पता है कि मैं डेटाबेस को बदलने के लिए ALTER DATABASE का उपयोग कर सकता हूं, लेकिन यह केवल नई वस्तुओं को प्रभावित करता है। मेरी समझ यह है कि मौजूदा कॉलम को बदलने का एकमात्र तरीका प्रत्येक तालिका में प्रत्येक कॉलम पर ALTER COLUMN करना है - और मुझे ऐसा करने के लिए सभी अनुक्रमितों को छोड़ने और पुन: बनाने की आवश्यकता होगी।

मुझे लगता है कि यह कुछ इस तरह दिखेगा:

DROP INDEX indexname ON tablename

GO

ALTER TABLE tablename ALTER COLUMN columname varchar(50) COLLATE Latin1_General_CI_AS NULL

GO

CREATE CLUSTERED INDEX indexname ON tablename (columname ASC)

और पूरे डेटाबेस में हर varchar, char, text, nvarchar, nchar और ntext कॉलम के लिए दोहराएँ। यह एक विशाल एसक्यूएल स्क्रिप्ट होगी।

क्या ऐसा करने का एक आसान तरीका है, या कोई इसे करने के लिए SQL स्क्रिप्ट के निर्माण को स्वचालित करने का एक तरीका सुझा सकता है?

जवाबों:


9

MS KB 325335 में पूरे db और सभी कॉलम के लिए यह करने के विकल्प हैं।

मूल रूप से:

  1. स्क्रिप्ट डेटाबेस टेबल (नए टकराव के साथ)
  2. DTS / SSIS डेटा (टक्कर देखना)
  3. अड़चनें जोड़ें

3

इसे कुछ ट्विकिंग की आवश्यकता हो सकती है, लेकिन मुझे "SQL Server 2000 Collation Changer" उपयोगिता का उपयोग करने में सफलता मिली: http://www.codeproject.com/KB/database/ChangeCollation.aspx


2

दुर्भाग्य से यह SQL सर्वर में एक आसान काम नहीं है।

आप अपने मौजूदा डेटाबेस ऑब्जेक्ट्स (टेबल, संग्रहीत कार्यविधियाँ, विचार आदि) के लिए Redgate की SQL तुलना जैसे एक स्क्रिप्टिंग टूल का उपयोग कर सकते हैं। यदि आपके पास कोई लाइसेंस नहीं है, तो आप नि: शुल्क परीक्षण का उपयोग कर सकते हैं। सही डेटाबेस के साथ नया डेटाबेस बनाने और अपनी स्क्रिप्ट से ऑब्जेक्ट्स का पुनर्निर्माण करने के बाद, आप डेटा को एक डेटाबेस से दूसरे डेटाबेस में स्थानांतरित करने के लिए SSIS चला सकते हैं। यदि आपके पास बहुत सारा डेटा है, तो T-SQL बल्क इंसर्ट का उपयोग करें।

उस सर्वर पर भविष्य के डेटाबेस के लिए सही टकराव होने के लिए, आप सर्वर पर डिफ़ॉल्ट टकराव को बदल सकते हैं। निम्न MSDN आलेख बताता है कि क्या परिवर्तन और बेहतर तालिका के कोलाज़ क्लाज का उपयोग करके परिवर्तन होता है:

डेटाबेस Collation सेट करना और बदलना (SQL Server 2008 पुस्तकें ऑनलाइन)

आप किसी भी नई वस्तुओं के टकराव को बदल सकते हैं जो कि उपयोगकर्ता डेटाबेस में ALTER DATABASE स्टेटमेंट के COLLATE क्लॉज का उपयोग करके बनाई जाती हैं । यह कथन किसी भी मौजूदा उपयोगकर्ता-परिभाषित तालिकाओं में स्तंभों के टकराव को नहीं बदलता है। इन्हें ALTER TABLE के COLLATE क्लॉज का उपयोग करके बदला जा सकता है ।

जब आप डेटाबेस कोलाज को बदलते हैं, तो आप निम्न को बदलते हैं:

  • डेटाबेस के लिए डिफ़ॉल्ट टकराव। यह नया डिफ़ॉल्ट टकराव डेटाबेस में बनाए गए सभी कॉलम, उपयोगकर्ता-परिभाषित डेटा प्रकार, चर और मापदंडों पर लागू होता है। डेटाबेस में परिभाषित वस्तुओं के खिलाफ SQL बयानों में निर्दिष्ट ऑब्जेक्ट पहचानकर्ताओं को हल करते समय भी इसका उपयोग किया जाता है।
  • सिस्टम टेबलों में कोई भी चार, वर्चर, टेक्स्ट, एनकर, एनवार्चर या नेक्स्ट कॉलम नए कोलाज में बदले जाते हैं।
  • सभी मौजूदा char, varchar, text, nchar, nvarchar, या ntext पैरामीटर और संग्रहीत प्रक्रियाओं के लिए स्केलर रिटर्न मान और उपयोगकर्ता-निर्धारित फ़ंक्शंस को नए कोलाज में बदल दिया जाता है।
  • Char, varchar, text, nchar, nvarchar, या ntext सिस्टम डेटा प्रकार और इन सिस्टम डेटा प्रकारों के आधार पर सभी उपयोगकर्ता-परिभाषित डेटा प्रकार, नए डिफ़ॉल्ट कोलाजेशन में बदल दिए जाते हैं।

1

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

एक डीबी के साथ एक सर्वर को एक अलग डिफ़ॉल्ट टकराव के साथ पुनर्स्थापित करना सभी प्रकार के मज़े का कारण बनता है क्योंकि टेम्पेडब में नए सर्वर का टकराव होगा, इसलिए यह भी अनुशंसित नहीं है।



1

आप आसानी से पर्याप्त स्क्रिप्ट बनाने के लिए Infomation_Schema दृश्यों का उपयोग कर सकते हैं, लेकिन मुझे यकीन नहीं है कि यह आपकी समस्या को हल करने का सबसे अच्छा तरीका है। लार्ग डीबी पर सभी इंडेक्स बनाने से भारी मात्रा में समय लग सकता है / लॉग स्पेस आदि। मैं एक नए उदाहरण में माइग्रेट (पुनर्स्थापित नहीं) के साथ जाऊंगा।

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