2010-01-05 18 views
6

मेरे पास एक डेटाबेस है जहां सभी तालिकाओं को एक ही वर्ण के सेट के साथ उपसर्ग किया जाता है। ऐसा इसलिए किया गया क्योंकि एक समय में वे सैकड़ों अन्य तालिकाओं के साथ पालतू परियोजनाओं के लिए स्थापित एक साझा डेटाबेस में थे। आवेदन, और इस प्रकार डेटाबेस, अब उस चरण से बाहर निकलने के लिए तैयार है और अपने आप से बाहर निकलने के लिए तैयार है। मैं प्रत्येक तालिका के लिए उपसर्ग को हटाना चाहता हूं। क्या प्रत्येक तालिका को राइट-क्लिक करने और नाम बदलने के बजाए ऐसा करने का कोई आसान तरीका है?डेटाबेस में सभी तालिकाओं का नाम बदलें

+1

मैं नई टेबल के लिए नई नामकरण योजना के साथ एक नया डेटाबेस बनाया होगा, और डेटा का चयन किया होगा। –

+0

इस पर भी एक नज़र डालें - "टेबल्स और संग्रहीत प्रक्रियाओं का मास नामकरण" http://stackoverflow.com/questions/1098585/mass-renaming-of-tables-and-stored-procedures – Bratch

उत्तर

2

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

भी इस पर एक नजर डालें - Mass Renaming of Tables and Stored Procedures

एक विधि कुछ लागत है और अन्य मेरी सुझाव के समान है।

+0

@ ब्रैच +1 मैंने जो कहा वह कहने का एक बहुत अच्छा तरीका है। – Hogan

+1

@ होगन हाँ, लेकिन अलग।आपका जवाब मेटा डेटा को संशोधित करने के लिए वास्तव में एक स्क्रिप्ट लिखने जैसा लगता है। मैं यह नहीं कह रहा हूं कि आपको एक स्क्रिप्ट लिखने की ज़रूरत है, बस एसक्यूएल कमांड के रूप में डेटाबेस को स्क्रिप्ट करें (राइट-क्लिक, टास्क, स्क्रिप्ट जेनरेट करें)। किसी भी चीज़ को ढूंढें/प्रतिस्थापित करें और उपसर्ग को प्रतिस्थापित करें, और उसके बाद संशोधित SQL को नए डेटाबेस पर चलाएं। यह विचारों और स्पॉक्स में तालिकाओं के सभी संदर्भों का नाम बदल देगा। डीबी स्क्रिप्ट द्वारा जेनरेट किए गए एसक्यूएल पर एक त्वरित रूप से विचार करना चाहिए कि यह सही काम करेगा या नहीं। – Bratch

4

मेटा जानकारी देखने और इसे बदलने के लिए आप एक स्क्रिप्ट लिख सकते हैं, लेकिन क्या यह आपके सभी एसपी और पैरामीटरेटेड क्वेरीज़ को बर्बाद नहीं करेगा?

+1

यह सबकुछ बर्बाद कर देगा - विचार , आदि। यदि किसी भी चीज़ पर योजनाबद्ध है, तो उसे पहले से निपटना होगा ... –

0

सबसे पहले, एक संग्रहित प्रक्रिया लिखें जिसमें तालिका नाम पैरामीटर है और निर्दिष्ट तालिका से उपसर्ग को निकालने के लिए स्ट्रिंग पार्सिंग और वैकल्पिक तालिका का उपयोग करता है।

फिर, प्रत्येक तालिका के लिए उस प्रक्रिया को कॉल करने के लिए sp_MSforeachtable का उपयोग करें।

संदर्भ: http://weblogs.sqlteam.com/joew/archive/2007/10/23/60383.aspx

9
select 'exec sp_rename @objname=' + name + ', @newname=' + replace(name ,'prefixedchars', '') 
from sysObjects 
where type = 'U' 

इस से परिणाम होगा कुछ की तरह:

exec sp_rename @objname=prefixedcharsTable1, @newname=Table1 
exec sp_rename @objname=prefixedcharsTable2, @newname=Table2 
exec sp_rename @objname=prefixedcharsTable3, @newname=Table3 
etc... for each table in your db 

तुम सब एक नई क्वेरी खिड़की और रन में उन बयानों कॉपी करना है।

चेतावनियां:

  • इस प्रकार आप एक सचेतक संदेश प्राप्त होगा: Caution: Changing any part of an object name could break scripts and stored procedures.
  • आप किसी भी संग्रहित प्रक्रियाओं, कार्यों, विचारों, और ट्रिगर में तालिकाओं का नाम बदलने का होगा।
+0

यह एक अच्छा समाधान है क्योंकि आप नाम से पहले नाम बदलें स्क्रिप्ट देख सकते हैं। –

0

शुद्ध रूप से "राइट-क्लिक के लिए प्रतिस्थापन, नाम बदलें" परिप्रेक्ष्य (संदर्भों, प्रक्रियाओं, विचारों आदि का नाम बदलने) से - इसे थोड़ा मिश्रण करें।

select name from sys.Tables 

कॉपी और यह अतीत Emacs (या अपने पसंदीदा regex लाइन संपादक) में और एक regex लाइन प्रतिस्थापन चलाएँ:: तालिकाओं की सूची प्राप्त करें खोज \(xyz.*\) और SP_RENAME 'xyz\1', '\1'; यह फू के साथ तालिका xyzFoo repalces के साथ बदलें। लाइनों को SQL सर्वर में वापस पेस्ट करें और इसे चलाएं।

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