SQL सर्वर में एक बाधा का नाम बदलें?


83

क्या SQL सर्वर में एक बाधा का नाम बदलना संभव है? मुझे हटाना नहीं है और एक नया बनाना है क्योंकि यह बाधा अन्य पहले से मौजूद बाधाओं को प्रभावित करती है और मुझे उन लोगों को फिर से बनाना / बदलना होगा।

जवाबों:


77

आप का उपयोग करके sp_rename का उपयोग करके नाम बदल सकते हैं@objtype = 'OBJECT'

यह sys.objects में सूचीबद्ध वस्तुओं पर काम करता है जिसमें अड़चनें शामिल हैं


14
बस अगर आप इसे काम करने के लिए नहीं प्राप्त कर सकते हैं, तो यह MSDN में कहता है - "जब एक बाधा का नाम बदला जाता है, तो स्कीमा जिसके लिए बाधा होती है उसे निर्दिष्ट किया जाना चाहिए।"
ब्लैक लाइट

1
पीके बाधाओं के @objtype = 'OBJECT'लिए निर्दिष्ट करने की कोई आवश्यकता नहीं है । बस पुराना नाम और नया नाम निर्दिष्ट करें।
pkuderov

77

कुछ और खुदाई के बाद, मैंने पाया कि यह वास्तव में इस रूप में होना चाहिए:

EXEC sp_rename N'schema.MyIOldConstraint', N'MyNewConstraint', N'OBJECT'

स्रोत


7
यह अधिक सटीक उत्तर है। अन्य रूप केवल इसलिए काम करते हैं क्योंकि अधिकांश लोग अपनी सभी तालिकाओं को डिफ़ॉल्ट स्कीमा (आमतौर पर "dbo :) में डंप करते हैं और आप डिफ़ॉल्ट स्कीमा को छोड़ सकते हैं। लेकिन यदि आप कई स्कीमाओं का उपयोग करते हैं, तो यह सही है (और आप हमेशा" dbo "बता सकते हैं। )।
गोडके

स्रोत से, ऐसा नहीं लगता है कि आपको N'OBJECT के संदर्भ की आवश्यकता है
Abrham Smith

52

आप sp_rename का उपयोग कर सकते हैं ।

sp_rename 'CK_Ax', 'CK_Ax1'

2
+1 यह SSMS बाधाओं का नाम बदलने के दौरान उपयोग करता है। पीके बाधा के लिए यह INDEXऑब्जेक्ट प्रकार के रूप में गुजरता है ।
मार्टिन स्मिथ

3
यह भी ध्यान रखना महत्वपूर्ण है कि CHECK की कमी, PKs के विपरीत, पहले sp_renameपैरामीटर पर तालिका उपसर्ग की आवश्यकता नहीं है , और यदि आप एक का उपयोग करते हैं तो विफल हो जाएगा।
मटमैक 3

8

उत्तर सत्य है:

exec sp_rename 
@objname = 'Old_Constraint',
@newname = 'New_Constraint',
@objtype = 'object'

4

मुझे पता है कि यह एक पुराना प्रश्न है, लेकिन मुझे सिर्फ अन्य महान उत्तरों के अलावा, बहुत उपयोगी होने के लिए निम्नलिखित मिला:

यदि नाम बदला जाने की अवधि इसमें (अवधि) है, तो आपको इसे वर्ग कोष्ठक में संलग्न करने की आवश्यकता है, जैसे:

sp_rename 'schema.[Name.With.Period.In.It]', 'New.Name.With.Period.In.It'

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