स्तंभ SQL Server 2008 का नाम बदलें


652

मैं SQL Server 2008 और Navicat का उपयोग कर रहा हूं। मुझे SQL का उपयोग करके तालिका में एक स्तंभ का नाम बदलने की आवश्यकता है।

ALTER TABLE table_name RENAME COLUMN old_name to new_name;

यह कथन काम नहीं करता है।


2
बाहर की जाँच करें stackoverflow.com/questions/174582/…
swetha

5
ध्यान दें कि यह प्रश्न # 174582 का एक डुप्लिकेट नहीं है जो स्वेता से जुड़ा हुआ है: यह एक MS SQL- विशिष्ट है, जो एक डेटाबेस-अज्ञेयवादी है।

जवाबों:


1193

उपयोग sp_rename

EXEC sp_RENAME 'TableName.OldColumnName' , 'NewColumnName', 'COLUMN'

देखें: SQL सर्वर - एक कॉलम का नाम या टेबल का नाम कैसे बदलें

प्रलेखन: sp_rename (Transact-SQL)

आपके मामले के लिए यह होगा:

EXEC sp_RENAME 'table_name.old_name', 'new_name', 'COLUMN'

अपने मूल्यों को शामिल करने के लिए एकल उद्धरणों का उपयोग करना याद रखें।


24
ध्यान दें कि आपको NewColumnName को कोष्ठक में नहीं रखना चाहिए, क्योंकि SQL सर्वर तब [[[NewColumnName]]] को नए स्तंभ के नाम के रूप में उपयोग करेगा। इसके अलावा, sp_rename को EXEC या EXECUTE द्वारा उपसर्ग किया जाना चाहिए।
मार्क फ्रीमैन

29
आपको कॉलम की पहचान करते हुए पहले पैरामीटर में कोष्ठक लगाने की अनुमति दी जाती है, लेकिन दूसरे पैरामीटर में नहीं। इस तरह:EXEC sp_RENAME '[TableName].[OldColumnName]', 'NewColumnName', 'COLUMN'
नील्स ब्रिंच

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

4
ध्यान दें कि यदि आप 'table_name.new_name' का उपयोग करते हैं तो यह [स्कीमा] बन जाता है। [table_name]। [table_name.new_name] - तो उस तालिका का नाम नए नाम में न रखें! (यह इस जवाब में सही है, बस झांकने के लिए एक नोट जोड़ रहा है)
मार्क शुल्त्स

1
यदि डेटाबेस में एक स्कीमा है, तो आपको टेबल के नाम से पहले स्कीमा नाम रखना होगा: EXEC sp_RENAME 'स्कीमा_name.table_name.old_name', 'new_name', 'COLUMN'
amin:

106

वैकल्पिक रूप से SQL, आप इसे Microsoft SQL सर्वर प्रबंधन स्टूडियो में कर सकते हैं। यहाँ कुछ त्वरित तरीके GUI का उपयोग कर रहे हैं:

पहला रास्ता

कॉलम पर डबल-क्लिक करें। कॉलम नाम एक संपादन योग्य टेक्स्ट बॉक्स बन जाएगा।


दूसरा तरीका

कॉलम पर राइट क्लिक करें और संदर्भ मेनू से नाम बदलें।

उदाहरण के लिए:

स्तंभ नाम का नाम बदलें


तीसरा रास्ता

जब आप एक बार में कई स्तंभों का नाम बदलना चाहते हैं, तो यह तरीका बेहतर होता है।

  1. तालिका में राइट-क्लिक करें जिसमें वह कॉलम है जिसमें नाम बदलने की आवश्यकता है।
  2. डिज़ाइन पर क्लिक करें ।
  3. तालिका डिज़ाइन पैनल में, उस कॉलम नाम के टेक्स्टबॉक्स पर क्लिक करें और संपादित करें जिसे आप बदलना चाहते हैं।

उदाहरण के लिए: MSSMS टेबल डिज़ाइन उदाहरण

नोट: मुझे पता है कि ओपी ने विशेष रूप से एसक्यूएल समाधान के लिए कहा था, सोचा कि यह दूसरों की मदद कर सकता है :)


1
या उपयोगकर्ता के पास विशेषाधिकार नहीं हैं।
कैरी केंडल

6
कभी ऐसा मत करो। आप तालिका की प्रतिलिपि बना रहे हैं, फिर पुराने को छोड़ कर उसका नाम बदल रहे हैं। तालिका के बारे में कुछ भी बदलने के लिए GUI EVER का उपयोग न करें।
HLGEM

6
@HLGEM यह एक बहुत बड़ा कंबल कथन है। किसी भी मामले में, क्या आपने जो कुछ भी समझाया है, क्या आप उसे कोई संसाधन प्रदान कर सकते हैं? यानी मेज गिराना, आदि
कैरी केंडल

2
@CarrieKendall, इसे बनाने के बजाय GUI से परिवर्तन को स्क्रिप्ट करता है और आप देखेंगे। यही कारण है कि बहुत धीमी है GUI का उपयोग कर एक बड़ी तालिका में sp_rename या परिवर्तन तालिका के माध्यम से परिवर्तन करने के लिए। इसके अलावा, डेटाबेस संरचना में परिवर्तन कोड परिवर्तन हैं और अन्य कोड की तरह स्रोत नियंत्रण में होना चाहिए ताकि एक स्क्रिप्ट में होना चाहिए। यह विशेष रूप से महत्वपूर्ण है यदि आप देव उत्पादन डेटाबेस अधिकारों को टेबल बदलने की अनुमति नहीं देते हैं, तो यह सुनिश्चित करें कि आपको किसी भी मामले में स्क्रिप्ट की आवश्यकता होगी। और आप ठेस पर लाखों रिकॉर्ड के साथ तालिकाओं को कॉपी, ड्रॉप और रिक्रिएट करने के बारे में नहीं जाना चाहते हैं।
HLGEM

18
मैंने अभी एक SQL Server 2012 टेबल का नाम प्रबंधन स्टूडियो का उपयोग करके प्रोफाइलर के साथ चल रहा है और इसमें sp_rename का उपयोग किया है। हालांकि पहले के संस्करणों के लिए बात नहीं कर सकते।
स्टीव डाउलिंग


27

आपको तालिका का स्कीमा भी निर्दिष्ट करना चाहिए या आपको यह त्रुटि मिल सकती है:

Msg 15248, स्तर 11, राज्य 1, प्रक्रिया sp_rename, पंक्ति 238 या तो पैरामीटर @objname अस्पष्ट है या दावा किया गया @objtype (COLUMN) गलत है।

यदि यह एक परिनियोजन स्क्रिप्ट है, तो मैं इसमें कुछ अतिरिक्त सुरक्षा जोड़ने की भी सिफारिश करूंगा।

IF EXISTS (
        SELECT 1
        FROM sys.columns
        WHERE
            name = 'OldColumnName' AND
            object_name(object_id) = 'TableName'
    ) AND
    NOT EXISTS (
        SELECT 1
        FROM sys.columns
        WHERE
            name = 'NewColumnName' AND
            object_name(object_id) = 'TableName'
    )
    EXEC sp_RENAME 'SchemaName.TableName.OldColumnName', 'NewColumnName', 'COLUMN';

मुझे यह सुरक्षित दृष्टिकोण पसंद है, माइग्रेशन लिखने के लिए अच्छा है जो विभिन्न वातावरणों पर चल सकता है / नहीं हो सकता है।
आदिल एच। रज़ा

अस्तित्व की जाँच की तरह, मुझे अन्य लिपियों के एक बैच के हिस्से के रूप में ठीक
ठाक महसूस हो रहा है

19

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

  1. एक ही डेटा प्रकार और नया नाम के साथ एक नया कॉलम बनाएँ।
  2. सभी डेटा को नए कॉलम में कॉपी करने के लिए UPDATE / INSERT स्टेटमेंट चलाएँ।
  3. पुराना कॉलम ड्रॉप करें।

उपयोग करने के पीछे लाभ sp_renameयह है कि इससे जुड़े सभी संबंधों का ध्यान रखा जाता है।

से प्रलेखन :

जब भी कोई PRIMARY KEY या UNIQUE बाधा का नाम बदल दिया जाता है, तो sp_rename स्वचालित रूप से संबंधित सूचकांक का नाम बदल देता है। यदि एक नामांकित सूचकांक एक PRIMARY KEY बाधा से बंधा होता है, तो PRIMARY KEY बाधा भी स्वतः ही sp_rename द्वारा बदल दिया जाता है। sp_rename का उपयोग प्राथमिक और द्वितीयक XML इंडेक्स का नाम बदलने के लिए किया जा सकता है।


* चरण १ में NULL को नए कॉलम में अनुमति दी जानी है * नए कॉलम को बदलने के लिए वैकल्पिक रूप से ४ स्टेप जोड़ें, कि यह NULL मानों की अनुमति नहीं देता है
BitLauncher

16

आप sp_renameकिसी स्तंभ का नाम बदलने के लिए उपयोग कर सकते हैं ।

USE YourDatabase;  
GO  
EXEC sp_rename 'TableName.OldColumnName', 'NewColumnName', 'COLUMN';  
GO  

पहले पैरामीटर वस्तु संशोधित किया जा रहा है, दूसरा पैरामीटर नया नाम उस वस्तु को दिया जाएगा है, और तीसरा पैरामीटर स्तंभ सूचित सर्वर है कि नाम परिवर्तन के लिए है column, और यह भी नाम बदलने के लिए इस्तेमाल किया जा सकता tables, indexऔर alias data type


2
समझ में नहीं आता, आप sp_rename के बारे में 5 में से 4 के ऊपर भी नया उत्तर क्यों जोड़ते हैं ...?
पावेल काजापस्की

3
किसी बिंदु पर, किसी को यहां पैरामीटर के संचालन के बारे में समझाना होगा, किसी ने ऐसा नहीं किया
एलेक्जेंड्रे न्यूकिर्चेन

1
हाँ, वास्तव में आप सही हैं, मेरे लिए यह बहुत स्पष्ट है लेकिन नए लाड के लिए नहीं हो सकता है।
पावेल काजापस्की

12

चूंकि मैं अक्सर यहां आता हूं और फिर सोचता हूं कि कैसे कोष्ठक का उपयोग किया जाए, यह उत्तर मेरे जैसे लोगों के लिए उपयोगी हो सकता है।

EXEC sp_rename '[DB].[dbo].[Tablename].OldColumnName', 'NewColumnName', 'COLUMN'; 
  • OldColumnNameमें नहीं होना चाहिए []। यह काम नहीं करेगा।
  • न रखें NewColumnNameमें [], इसे में परिणाम होगा [[NewColumnName]]

3

Sql सर्वर प्रबंधन स्टूडियो ने कुछ सिस्टम को संग्रहीत कार्यविधियों (SP) को परिभाषित किया है
, जिनमें से एक का उपयोग एक स्तंभ का नाम बदलने के लिए किया जाता है। SP sp_rename है

सिंटैक्स: sp_rename '[table_name] .old_column_name', 'new_column_name'
इस लेख को आगे मदद के लिए: Microsoft डॉक्स द्वारा sp_rename

नोट: इस एसपी के निष्पादन पर एसक्यूएल सर्वर आपको सावधानी का संदेश देगा, ' सावधानी: किसी वस्तु के नाम के किसी भी भाग को बदलने से स्क्रिप्ट और संग्रहीत कार्यविधियाँ टूट सकती हैं '। यह केवल तभी महत्वपूर्ण है जब आपने अपना स्वयं का लिखा हो जिसमें कॉलम शामिल हो। तालिका में आप बदलने वाले हैं।


2

@ तहर का बेहतर संस्करण

DECLARE @SchemaName AS VARCHAR(128)
DECLARE @TableName AS VARCHAR(128)
DECLARE @OldColumnName AS VARCHAR(128)
DECLARE @NewColumnName AS VARCHAR(128)
DECLARE @ParamValue AS VARCHAR(1000)

SET @SchemaName = 'dbo'
SET @TableName = 'tableName'
SET @OldColumnName = 'OldColumnName'
SET @NewColumnName = 'NewColumnName'
SET @ParamValue = @SchemaName + '.' + @TableName + '.' + @OldColumnName

IF EXISTS
(
    SELECT 1 FROM sys.columns WHERE name = @OldColumnName AND OBJECT_NAME(object_id) = @TableName
)
AND NOT EXISTS
(
    SELECT 1 FROM sys.columns WHERE name = @NewColumnName AND OBJECT_NAME(object_id) = @TableName
)
BEGIN
    EXEC sp_rename @ParamValue, @NewColumnName, 'COLUMN';
END

0

या आप SQL मैनेजमेंट स्टूडियो में कॉलम पर सिर्फ दो बार धीमी गति से क्लिक कर सकते हैं और UI के माध्यम से इसका नाम बदल सकते हैं ...


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