किसी मौजूदा तालिका से स्तंभ कैसे निकालें?


386

किसी मौजूदा तालिका से स्तंभ कैसे निकालें?

मेरे पास एक टेबल MENहै FnameऔरLname

मुझे हटाने की जरूरत है Lname

यह कैसे करना है?



जवाबों:



157

सामान्य:

ALTER TABLE table_name DROP COLUMN column_name;

आपके मामले में:

ALTER TABLE MEN DROP COLUMN Lname;

72

आपका उदाहरण सरल है और इसके लिए किसी अतिरिक्त तालिका परिवर्तन की आवश्यकता नहीं है, लेकिन आम तौर पर बोलना इतना तुच्छ नहीं है।

यदि इस स्तंभ को अन्य तालिकाओं द्वारा संदर्भित किया जाता है, तो आपको यह पता लगाने की आवश्यकता है कि अन्य तालिकाओं / स्तंभों के साथ क्या करना है। एक विकल्प विदेशी कुंजी को हटाने और अन्य तालिकाओं में संदर्भित डेटा रखना है।

एक अन्य विकल्प सभी संदर्भित स्तंभों को ढूंढना और उन्हें हटाने के साथ-साथ यदि उन्हें किसी भी समय की आवश्यकता नहीं है।

ऐसे मामलों में असली चुनौती सभी विदेशी कुंजियों को ढूंढना है। आप सिस्टम टेबल्स को क्वेरी करके या ApexSQL सर्च (फ्री) या रेड गेट डिपेंडेंसी ट्रैकर (प्रीमियम लेकिन अधिक फीचर्स) जैसे थर्ड पार्टी टूल्स का उपयोग करके ऐसा कर सकते हैं । वहाँ विदेशी कुंजी पर एक पूरी धागा यहाँ


47

यह सही जवाब है:

ALTER TABLE MEN DROP COLUMN Lname

लेकिन ... अगर एक CONSTRAINTपर मौजूद है COLUMN, तो आप चाहिए पहले, तो आप में सक्षम हो जाएगा । ड्रॉप करने के लिए :DROPCONSTRAINTDROPCOLUMNCONSTRAINT

ALTER TABLE MEN DROP CONSTRAINT {constraint_name_on_column_Lname}

अन्य टेबल tb_name DROP FOREIGN KEY
key_name

3
constraintएक कॉलम की खोज कैसे करें ?
किकेनेट

21

में SQL सर्वर 2016 आप नए DIE बयानों का उपयोग कर सकते हैं।

ALTER TABLE Table_name DROP COLUMN IF EXISTS Column_name

उपरोक्त क्वेरी को फिर से चलाने dropsयोग्य है यदि यह existsतालिका में केवल तभी है जब वह त्रुटि नहीं करेगा।

बड़े IFरैपर का उपयोग करने के बजाय columnइसे छोड़ने से पहले इसके अस्तित्व को जांचने के लिए आप उपरोक्त DDLकथन को चला सकते हैं


3
क्या है DIE स्टेटमेंट ?
किकेटनेट

3
वैसे, आप इन प्रकार के "री-रननेबल" स्क्रिप्ट्स / फ़ंक्शंस को इम्पोटेंट
tomosius

4
यह स्वीकृत उत्तर होना चाहिए। यदि आपके पास स्वचालित sql स्क्रिप्ट है, तो आप अपनी स्क्रिप्ट को इस तरह रक्षात्मक रूप से लिख सकते हैं।
विजेता

7

सवाल यह है कि क्या आप केवल एक तालिका को किसी अनिर्दिष्ट तालिका से हटा सकते हैं ;-)

BEGIN TRANSACTION

IF exists (SELECT * FROM  sys.columns c 
INNER JOIN  sys.objects t ON (c.[object_id] = t.[object_id])
WHERE t.[object_id] = OBJECT_ID(N'[dbo].[MyTable]')
AND c.[name] = 'ColumnName')
    BEGIN TRY
        ALTER TABLE [dbo].[MyTable] DROP COLUMN ColumnName
    END TRY
    BEGIN CATCH
        print 'FAILED!'
    END CATCH
ELSE
    BEGIN 
        SELECT ERROR_NUMBER() AS ErrorNumber;
        print 'NO TABLE OR COLUMN FOUND !'
    END 

COMMIT  

1
मुझे लगता है कि अगर आप किसी अनिर्दिष्ट तालिका से एक स्तंभ को गिराना चाहते हैं, तो यह ऐसा करने का तरीका होगा
मतिआन

6

इसका सरल उत्तर इसका उपयोग करना है:

ALTER TABLE MEN DROP COLUMN Lname;

एक से अधिक कॉलम इस तरह निर्दिष्ट किए जा सकते हैं:

ALTER TABLE MEN DROP COLUMN Lname, secondcol, thirdcol;

SQL सर्वर 2016 से स्तंभ को केवल तब ही ड्रॉप करना संभव है जब वह मौजूद हो। जब कॉलम मौजूद नहीं होता है तो आपको कोई त्रुटि मिलती है जो ऐसी चीज है जिसकी आपको परवाह नहीं है।

ALTER TABLE MEN DROP COLUMN IF EXISTS Lname;

स्तंभों को छोड़ने के लिए कुछ आवश्यक शर्तें हैं। गिराए गए कॉलम नहीं हो सकते हैं:

  • एक सूचकांक द्वारा उपयोग किया जाता है
  • CHECK, FOREIGN KEY, UNIQUE, या प्राथमिक कुंजी बाधाओं द्वारा उपयोग किया जाता है
  • एक DEFAULT के साथ जुड़े
  • एक नियम से बंधा हुआ

यदि उपरोक्त में से कोई भी सत्य है, तो आपको पहले उन संघों को छोड़ने की आवश्यकता है।

इसके अलावा, यह ध्यान दिया जाना चाहिए कि एक स्तंभ छोड़ने से हार्ड डिस्क से अंतरिक्ष को पुनः प्राप्त नहीं होता है जब तक कि तालिका का क्लस्टर इंडेक्स फिर से नहीं बनाया जाता है। जैसा कि अक्सर यह एक अच्छा विचार है कि इस तरह एक तालिका पुनर्निर्माण के साथ ऊपर का पालन करें:

ALTER TABLE MEN REBUILD;

अंत में जैसा कि कुछ ने कहा है कि यह धीमा हो सकता है और संभवतः अवधि के लिए तालिका को लॉक कर देगा। वांछित संरचना के साथ एक नई तालिका बनाना संभव है और फिर इस तरह से नाम बदलें:

SELECT 
   Fname 
   -- Note LName the column not wanted is not selected
INTO 
   new_MEN
FROM
   MEN;

EXEC sp_rename 'MEN', 'old_MEN';
EXEC sp_rename 'new_MEN', 'MEN';

DROP TABLE old_MEN;

लेकिन पहले चेतावनी और अंतिम नाम बदलने के आदेश के बीच यहाँ सम्मिलित पंक्तियों के डेटा हानि के लिए एक खिड़की है।


2

मौजूदा तालिका में कॉलम जोड़ने के लिए:

ALTER TABLE table_name
 ADD
 column_name DATATYPE NULL  

मौजूदा तालिका में कॉलम हटाने के लिए:

ALTER TABLE table_name
DROP COLUMN column_name

ADD कॉलम के बारे में प्रश्न नहीं ।
किकेनेट

2

यह SSMS GUI के माध्यम से भी किया जा सकता है। इस पद्धति के बारे में अच्छी बात यह है कि यह आपको चेतावनी देता है यदि उस स्तंभ पर कोई संबंध हैं और स्वचालित रूप से उन लोगों को भी हटा सकता है।

  1. डिज़ाइन दृश्य में तालिका डालें (तालिका पर राइट क्लिक करें) जैसे:

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

  1. तालिका के डिज़ाइन दृश्य में कॉलम पर राइट क्लिक करें और "कॉलम हटाएं" पर क्लिक करें

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

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


0

यदि आप C # का उपयोग कर रहे हैं और आइडेंटिटी कॉलम int है, तो बिना कोई मूल्य प्रदान किए int का नया उदाहरण बनाएं। यह मेरे लिए काम करता है।

[पहचान_ कॉलम] = नया इंट ()


यह उत्तर क्या करेगा? क्या यह स्तंभ को तालिका से हटा देगा?
प्रशांत पिंपले

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