SQL सर्वर में एक एकल तालिका विवरण के साथ कई स्तंभों को कैसे ड्रॉप करें?


292

मैं एक ALTER TABLEबयान में एक एकल तालिका से कई कॉलम छोड़ने के लिए एक एकल एसक्यूएल कमांड लिखना चाहूंगा ।

से MSDN के ALTER तालिका प्रलेखन ...

DROP { [CONSTRAINT] constraint_name | COLUMN column_name }

निर्दिष्ट करता है कि constraint_name या column_name तालिका से निकाल दिया गया है। यदि संगतता स्तर 65 या उससे पहले है, तो DROP COLUMN की अनुमति नहीं है। एकाधिक कॉलम और बाधाओं को सूचीबद्ध किया जा सकता है।

यह कहता है कि उत्परिवर्ती स्तंभों को बयान में सूचीबद्ध किया जा सकता है लेकिन वाक्यविन्यास एक वैकल्पिक अल्पविराम या ऐसा कुछ भी नहीं दिखाता है जो वाक्यविन्यास पर भी संकेत देगा।

एक कथन (यदि संभव हो) में कई कॉलम छोड़ने के लिए मुझे अपनी एसक्यूएल कैसे लिखनी चाहिए?

जवाबों:


431

SQL सर्वर के लिए:

ALTER TABLE TableName
    DROP COLUMN Column1, Column2;

वाक्य-विन्यास है

DROP { [ CONSTRAINT ] constraint_name | COLUMN column } [ ,...n ] 

MySQL के लिए:

ALTER TABLE TableName
    DROP COLUMN Column1,
    DROP COLUMN Column2;

या इस तरह 1 :

ALTER TABLE TableName
    DROP Column1,
    DROP Column2;

1 शब्द COLUMNहै वैकल्पिक और, छोड़ा जा सकता है के लिए छोड़कर RENAME COLUMN(से एक कॉलम-नाम बदलने संचालन भेद करने के लिए RENAMEटेबल का नाम बदलने संचालन)। अधिक जानकारी यहाँ


1
@Gweebz - मुझे लगता है कि आपके पास जो त्रुटि थी, वह कॉलम उपयोग से संबंधित थी। स्तंभ का उपयोग बाधा, सूचकांक या किसी अन्य परिकलित स्तंभ में किया जा सकता है।
एलेक्स आजा

यकीनन; एक सूचकांक में मेरे द्वारा उपयोग किया गया दूसरा कॉलम। मैंने उस सूचकांक को गिरा दिया और मेरे DROP कथन ने उसके बाद पूरी तरह से काम किया।
जेसी वेब वेब

@ जैकी - यह शायद इसलिए हुआ होगा, क्योंकि जिन कॉलमों को आप छोड़ने की कोशिश कर रहे हैं उनमें से 1 प्राथमिक कुंजी हो सकती है।
बेनी

196

सारांश

ओरेकल :

ALTER TABLE table_name DROP (column_name1, column_name2);

MS SQL सर्वर :

ALTER TABLE table_name DROP COLUMN column_name1, column_name2

MySQL :

ALTER TABLE table_name DROP column_name1, DROP column_name2;

PostgreSQL

ALTER TABLE table_name DROP COLUMN column_name1, DROP COLUMN column_name2;

जागरूक रहें

DROP COLUMNकुछ DBMS के लिए डेटा को भौतिक रूप से नहीं हटाता है। जैसे MS SQL के लिए। निश्चित लंबाई के प्रकारों के लिए ( इंट , न्यूमेरिक , फ्लोट , डेटाइम , यूनिकफीडिफायर इत्यादि) स्तंभों को गिराए जाने के बाद जोड़े गए रिकॉर्ड के लिए भी खपत होती है। बर्बाद जगह से छुटकारा पाने के लिए करते हैं ALTER TABLE ... REBUILD


3
PostgreSQL के लिए आप COLUMNMySql की तरह कीवर्ड भी छोड़ सकते हैं ।
आर्टेम नोविकोव

1
आप MSSQL और Postgre SQL के लिए MySQL के लिए भी उसी प्रारूप का उपयोग कर सकते हैं: ALTER TABLE table_name DROP COLUMN column_name1, column_name2;
jciloa

अन्य DB विक्रेताओं के उत्तर का विस्तार करने के लिए धन्यवाद!
केजेपी

39
create table test (a int, b int , c int, d int);
alter table test drop column b, d;

ध्यान रखें कि DROP COLUMN डेटा को भौतिक रूप से नहीं हटाता है, और निश्चित लंबाई प्रकारों (उदाहरण, सांख्यिक, फ्लोट, डेटाटाइम, अद्वितीय पहचानकर्ता) के लिए स्तंभ खिसकने के बाद जोड़े गए रिकॉर्ड के लिए भी खपत होती है। बर्बाद जगह से छुटकारा पाने के लिए करते हैं ALTER TABLE ... REBUILD


11
तालिका आकार के बारे में नोट के लिए +1 और REBUILD की आवश्यकता होती है। क्या आप संदर्भ के रूप में दस्तावेज़ीकरण का लिंक प्रदान कर सकते हैं?
जेसी वेब वेब

2
ALTER TABLE में वहीं: msdn.microsoft.com/en-us/library/ms190273.aspx
Remus Rusanu

4
मैंने अपने DBA से REBUILD करने के बारे में बात की और उन्होंने कहा कि यदि टेबल में एक क्लस्टर इंडेक्स (जो मेरा था), मैं बस चला सकता था ALTER INDEX PK_IndexName ON TableName REBUILDऔर यह अंतरिक्ष को पुनः प्राप्त करेगा। यह कुछ हद तक यहां वर्णित है: msdn.microsoft.com/en-us/library/ms189858.aspx "इंडेक्स का पुनर्निर्माण" अनुभाग के तहत।
जेसी वेब

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

13

यह देर हो सकती है, लेकिन इस सवाल पर जाने वाले नए उपयोगकर्ताओं के लिए इसे साझा करना। एकाधिक स्तंभों को छोड़ने के लिए वास्तविक वाक्यविन्यास है

alter table tablename drop column col1, drop column col2 , drop column col3 ....

तो हर स्तंभ के लिए आपको मैसूर 5.0.45 में "ड्रॉप कॉलम" निर्दिष्ट करना होगा।


यह गलत सिंटैक्स है। का प्रयोग करें: वैकल्पिक टेबल टेस्ट ड्रॉप COLMN c1, c2;
ग्रीम

1
@Gememe वाक्यविन्यास सही है, मैंने इसका परीक्षण किया है और यह काम करता है, यदि मैं उपयोग करता हूं: ALTER TABLE Test DROP COLUMN c1, c2; मैसकल एक त्रुटि फेंकता है। ... सी 2 के पास
टॉम मावेंडा

6
@TomBikiNurse प्रश्न में MSDN संदर्भ है, इसलिए यह माना गया था कि प्रश्न में SQL MS SQL सर्वर से संबंधित है और MySQL से नहीं
सूर्य प्रताप

यह वास्तविक वाक्यविन्यास है। बेहतर मतदान के जवाब गलत हैं।
वड़पोर

@SuryaPratap प्रश्न अंतिम पैराग्राफ में 'मेरी एसक्यूएल' का उल्लेख करता है।
शाश्वत

4

Microsoft द्वारा एक ALTER स्टेटमेंट के एक कॉलम भाग को छोड़ने के लिए सिंटैक्स निर्दिष्ट है

 DROP 
 {
     [ CONSTRAINT ] 
     { 
          constraint_name 
          [ WITH 
           ( <drop_clustered_constraint_option> [ ,...n ] ) 
          ] 
      } [ ,...n ]
      | COLUMN 
      {
          column_name 
      } [ ,...n ]
 } [ ,...n ]

ध्यान दें कि [, ... n] कॉलम के नाम और संपूर्ण ड्रॉप क्लॉज के अंत में दिखाई देता है। इसका मतलब यह है कि कई कॉलम हटाने के दो तरीके हैं। आप ऐसा कर सकते हैं:

ALTER TABLE TableName
    DROP COLUMN Column1, Column2, Column3

या यह

ALTER TABLE TableName
    DROP 
        COLUMN Column1,
        COLUMN Column2,
        COLUMN Column3

यदि आप किसी अवरोध को छोड़ने के साथ स्तंभ की बूंद को जोड़ना चाहते हैं तो यह दूसरा वाक्यविन्यास उपयोगी है:

ALTER TBALE TableName
    DROP
        CONSTRAINT DF_TableName_Column1,
        COLUMN Column1;

कॉलम ड्रॉप करते समय एसक्यूएल सीवर गिराए गए कॉलम द्वारा उठाए गए स्थान को पुनः प्राप्त नहीं करता है। डेटा प्रकारों के लिए जो पंक्तियों में इनलाइन संग्रहीत हैं (उदाहरण के लिए उदाहरण) यह परिवर्तन कथन के बाद जोड़ी गई नई पंक्तियों पर भी जगह ले सकता है। इसके चारों ओर पाने के लिए आपको टेबल पर एक क्लस्टर इंडेक्स बनाने की आवश्यकता है या पहले से ही एक होने पर क्लस्टर इंडेक्स को फिर से बनाना होगा। तालिका को संशोधित करने के बाद सूचकांक का पुनर्निर्माण एक REBUILD कमांड के साथ किया जा सकता है। लेकिन चेतावनी दी है कि यह बहुत बड़ी तालिकाओं पर धीमा हो सकता है। उदाहरण के लिए:

ALTER TABLE Test
    REBUILD;

3

MySQL (5.6) के लिए, आप एक एकल- dropस्थापन के साथ एक से अधिक स्तंभ ड्रॉप नहीं कर सकते हैं, बल्कि कई- dropअंश:

mysql> alter table test2 drop column (c1,c2,c3);
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(c1,c2,c3)' at line 1
mysql> alter table test2 drop column c1,c2,c3;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'c2,c3' at line 1
mysql> alter table test2 drop column c1, drop column c2, drop c3;
Query OK, 0 rows affected (0.64 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> 

BTW, ऊपर से जैसा कि आप देख सकते हैं के drop <col_name>लिए शॉर्टहैंड है।drop column <col_name>drop c3


2

यदि यह नीचे के सिंटैक्स कार्यों को हटाने के लिए सिर्फ एक कॉलम है

ALTER TABLE tablename DROP COLUMN column1;

एकाधिक स्तंभों को हटाने के लिए, DROP COLUMNdoesnot काम का उपयोग करते हुए, नीचे का सिंटैक्स काम करता है

ALTER TABLE tablename DROP (column1, column2, column3......);


1
alter table tablename drop (column1, column2, column3......);

यह गलत सिंटैक्स है। का प्रयोग करें: वैकल्पिक टेबल टेस्ट ड्रॉप COLMN c1, c2;
ग्रीम


0

यह क्वेरी कई कॉलम परीक्षण को बदल देगी।

create table test(a int,B int,C int);

alter table test drop(a,B);

यह गलत सिंटैक्स है। का प्रयोग करें: वैकल्पिक टेबल टेस्ट ड्रॉप COLMN c1, c2;
ग्रीम

0
ALTER table table_name Drop column column1, Drop column column2,Drop column column3;

MySQL DB के लिए।

या आप एक ही पंक्ति में फेरबदल करते हुए कुछ कॉलम जोड़ सकते हैं:

ALTER table table_name Drop column column1, ADD column column2 AFTER column7;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.