এসকিউএল সার্ভারে একক ALTER TABLE বিবৃতি সহ একাধিক কলাম কীভাবে ড্রপ করবেন?


292

আমি একটি ALTER TABLEবিবৃতিতে একক টেবিল থেকে একাধিক কলাম কমানোর জন্য একটি একক এসকিউএল কমান্ড লিখতে চাই ।

থেকে দুটিই MSDN-এর বিকল্প টেবিল ডকুমেন্টেশন ...

DROP { [CONSTRAINT] constraint_name | COLUMN column_name }

সারণি থেকে সীমাবদ্ধ_নাম বা কলাম_নাম সরানো হয়েছে তা উল্লেখ করে। সামঞ্জস্যতা স্তরটি 65 বা তার বেশি হলে ড্রপ কলম্বন অনুমোদিত নয়। একাধিক কলাম এবং সীমাবদ্ধতা তালিকাভুক্ত করা যেতে পারে।

এটি বলেছে যে বিবৃতিতে মুত্তলিঙ্গ কলামগুলি তালিকাবদ্ধ করা যেতে পারে তবে বাক্য বিন্যাসটি একটি optionচ্ছিক কমা বা এমন কিছু দেখায় না যা এমনকি সিনট্যাক্সেও ইঙ্গিত করে।

এক বিবৃতিতে (যদি সম্ভব হয়) একাধিক কলাম কমানোর জন্য কীভাবে আমার এসকিউএল লিখব?

উত্তর:


431

এসকিউএল সার্ভারের জন্য:

ALTER TABLE TableName
    DROP COLUMN Column1, Column2;

বাক্য গঠনটি হ'ল

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

মাইএসকিউএল এর জন্য:

ALTER TABLE TableName
    DROP COLUMN Column1,
    DROP COLUMN Column2;

বা এই 1 পছন্দ :

ALTER TABLE TableName
    DROP Column1,
    DROP Column2;

1 শব্দ COLUMNহয় ঐচ্ছিক এবং, বাদ দেওয়া যেতে পারে ছাড়া RENAME COLUMN(থেকে একটি কলাম-পুনঃনামকরনের অপারেশন পার্থক্য RENAMEসারণীর-পুনঃনামকরনের অপারেশন)। আরও তথ্য এখানে


1
@ গুয়েবজ - আমি ধরে নিয়েছি যে আপনার যে ত্রুটিটি ছিল তা কলাম ব্যবহারের সাথে সম্পর্কিত ছিল। কলাম একটি সীমাবদ্ধতা, সূচি বা অন্য গণনা করা কলামে ব্যবহৃত হতে পারে।
অ্যালেক্স আজা

অবিকল; আমার দ্বিতীয় কলামটি একটি সূচীতে ব্যবহৃত হয়েছিল। আমি সেই সূচকটি বাদ দিয়েছিলাম এবং আমার ডিআরপি বিবৃতি তার পরে পুরোপুরি কাজ করেছিল।
জেসি ওয়েব

@ জাইক্যাম - এটি সম্ভবত ঘটত কারণ আপনি যে কলামটি বাদ দেওয়ার চেষ্টা করছেন তার মধ্যে 1 টি প্রাথমিক কী হতে পারে।
বেনি

196

সংক্ষেপিত

ওরাকল :

ALTER TABLE table_name DROP (column_name1, column_name2);

এমএস এসকিউএল সার্ভার :

ALTER TABLE table_name DROP COLUMN column_name1, column_name2

মাইএসকিউএল :

ALTER TABLE table_name DROP column_name1, DROP column_name2;

পোস্টগ্রি

ALTER TABLE table_name DROP COLUMN column_name1, DROP COLUMN column_name2;

সচেতন থাকা

DROP COLUMNশারীরিকভাবে কিছু ডিবিএমএসের ডেটা সরিয়ে দেয় না । যেমন এমএস এসকিউএল এর জন্য for সংশোধন করা হয়েছে দৈর্ঘ্য প্রকার (জন্য int- এ , সাংখ্যিক , ভাসা , DATETIME , uniqueidentifier ইত্যাদি) স্থান কলাম পরে যোগ রেকর্ডের জন্য এমনকি ক্ষয়প্রাপ্ত হয় বাদ করা হয়েছে। নষ্ট স্থান থেকে মুক্তি পেতে ALTER TABLE ... REBUILD


3
পোস্টগ্রেএসকিউএল-এর জন্য আপনি COLUMNমাইএসকিউএল হিসাবে কীওয়ার্ডটি বাদ দিতে পারেন ।
আর্টেম নোভিকভ

1
আপনি মাইএসকিউএল এবং এমএস এসকিউএল এবং পোস্টগ্রি এসকিউএল হিসাবে একই ফর্ম্যাটটি ব্যবহার করতে পারেন: টেবিলের টেবিলের নাম ড্রপ কলম্ব কলাম_নাম 1, কলাম_নাম 2;
jciloa

অন্যান্য ডিবি বিক্রেতাদের উত্তর প্রসারিত করার জন্য আপনাকে ধন্যবাদ!
কেজেপি

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

সচেতন থাকুন যে ড্রপ কলাম শারীরিকভাবে ডেটা সরিয়ে দেয় না এবং স্থির দৈর্ঘ্যের ধরণের জন্য (int, সংখ্যা, ভাসা, তারিখের সময়, অনন্য পরিচয় ইত্যাদি) কলামগুলি বাদ দেওয়ার পরে যুক্ত রেকর্ডগুলির জন্যও স্থানটি গ্রাস করা হয়। নষ্ট স্থান থেকে মুক্তি পেতে ALTER TABLE ... REBUILD


11
টেবিলের আকারগুলির জন্য নোটের জন্য +1 এবং একটি ফেরত প্রয়োজন। আপনি কি রেফারেন্স হিসাবে ডকুমেন্টেশনের লিঙ্ক সরবরাহ করতে পারেন?
জেসি ওয়েব

2
: ALTER টেবিল রাইট সেখানে msdn.microsoft.com/en-us/library/ms190273.aspx
রেমাস Rusanu

4
আমি আমার ডিবিএর সাথে পুনরায় বিল্ডিংয়ের বিষয়ে কথা বললাম এবং তিনি বলেছিলেন যে টেবিলে যদি ক্লাস্টারড ইনডেক্স থাকে (যা আমার হয়েছিল), আমি কেবল চালাতে পারি ALTER INDEX PK_IndexName ON TableName REBUILDএবং এটি স্থানটি পুনরায় দাবি করতে পারে। এটি কিছুটা এখানে বর্ণিত হয়েছে: " এমডিডিএন.মাইক্রোসফটকম /en-us/library/ms189858.aspx " একটি সূচক পুনর্নির্মাণ "বিভাগের অধীনে।
জেসি ওয়েব

1
যে কেউ এরকম বাস্তবায়ন হবে কেন তার উপর কিছু আলোকপাত করতে পারে? আমি কলামটি বাদ দিলে আমি প্রত্যাশা করি যে সূচী, ডেটা এবং সেই কলামটিতে নির্মিত সমস্ত কিছুই শেষ হয়ে যাবে। সতর্কতা যতটুকু ছাড়াই জায়গা নষ্ট করা খারাপ অভ্যাসের মতো মনে হয়, বা আমি কি কিছু হারিয়ে ফেলছি?
দান্তে স্মিথ

13

এটি দেরিতে হতে পারে তবে নতুন ব্যবহারকারীদের জন্য এই প্রশ্নটি দেখার জন্য এটি ভাগ করে নেবে। একাধিক কলাম কমাতে প্রকৃত বাক্য গঠন

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

সুতরাং প্রতিটি কলামের জন্য আপনাকে মাইএসকিএল 5.0.45 এ "ড্রপ কলাম" নির্দিষ্ট করতে হবে।


এটি ভুল সিনট্যাক্স। ব্যবহার: টেবিল টেস্ট ড্রপ কলম্বন সি 1, সি 2;
গ্রিম

1
@ গ্রায়েম সিনট্যাক্সটি সঠিক, আমি এটি পরীক্ষা করেছি এবং এটি ব্যবহার করে, যদি আমি ব্যবহার করি: টেবিল টেস্টের ড্রপ কলাম সি 1, সি 2; মাইএসকিএল একটি ত্রুটি ছুড়ে ফেলে। ...
সি

6
@ টমবিকিউরউস প্রশ্নের একটি এমএসডিএন রেফারেন্স রয়েছে তাই ধারণা করা হয়েছিল যে প্রশ্নে থাকা এসকিউএল এমএস এসকিউএল সার্ভারের সাথে সম্পর্কিত, মাইএসকিউএল সম্পর্কিত নয়
সূর্য প্রতাপ

এটি আসল বাক্য গঠন। উত্তম ভোট দেওয়া উত্তরগুলি ভুল।
ভারডাম্পার

@ সূর্যপ্রতাপ প্রশ্নটি শেষ অনুচ্ছেদে 'আমার এসকিউএল' উল্লেখ করেছে।
শাশ্বত

4

মাইক্রোসফ্ট দ্বারা একটি 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;

কলামগুলি ড্রপ করার সময় এসকিউএল সেভার বাদ দেওয়া কলামগুলির দ্বারা নেওয়া স্থানটি পুনরায় দাবি করে না। সারিগুলিতে ইনলাইন সঞ্চিত এমন ডেটা ধরণের জন্য (উদাহরণস্বরূপ) এটি পরিবর্তনীয় বিবৃতি দেওয়ার পরে যুক্ত হওয়া নতুন সারিগুলিতে স্থানও নিতে পারে। এটি পেতে আপনাকে টেবিলে একটি ক্লাস্টারড সূচক তৈরি করতে হবে বা যদি ইতিমধ্যে এটি ক্লাস্টারড সূচি থাকে তবে এটি পুনরায় তৈরি করতে হবে। সারণিটি সংশোধন করার পরে পুনরায় বিল্ডিং কমান্ড দিয়ে সূচকটি পুনর্নির্মাণ করা যেতে পারে। তবে সতর্কতা অবলম্বন করুন এটি খুব বড় টেবিলগুলিতে ধীর হতে পারে। উদাহরণ স্বরূপ:

ALTER TABLE Test
    REBUILD;

3

মাইএসকিউএল (5 ম ভার্সন) এর জন্য আপনি একক 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> 

বিটিডাব্লু, উপরের থেকে যেমন দেখতে পাবেন তেমন drop <col_name>জন্য সংক্ষিপ্ত করে রাখা হয়েছে ।drop column <col_name>drop c3


2

নীচের সিনট্যাক্সটি মোছার জন্য এটি যদি কেবল একক কলাম হয় তবে কাজ করে

ALTER TABLE tablename DROP COLUMN column1;

DROP COLUMNডোনট কাজ না করে একাধিক কলাম মুছে ফেলার জন্য , নীচের সিনট্যাক্সটি কাজ করে

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


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

এটি ভুল সিনট্যাক্স। ব্যবহার: টেবিল টেস্ট ড্রপ কলম্বন সি 1, সি 2;
গ্রীম


0

এই কোয়েরিটি একাধিক কলাম পরীক্ষার এটি পরিবর্তন করবে।

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

alter table test drop(a,B);

এটি ভুল সিনট্যাক্স। ব্যবহার: টেবিল টেস্ট ড্রপ কলম্বন সি 1, সি 2;
গ্রিম

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

মাইএসকিউএল ডিবি এর জন্য।

অথবা আপনি একই লাইনে পরিবর্তন করার সময় কিছু কলাম যুক্ত করতে পারেন:

ALTER table table_name Drop column column1, ADD column column2 AFTER column7;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.