বিদ্যমান সারণী থেকে কীভাবে একটি কলাম সরাবেন?
আমি একটা টেবিল আছে MEN
সঙ্গে Fname
এবংLname
আমি এটি অপসারণ করা প্রয়োজন Lname
এটা কিভাবে করতে হবে?
বিদ্যমান সারণী থেকে কীভাবে একটি কলাম সরাবেন?
আমি একটা টেবিল আছে MEN
সঙ্গে Fname
এবংLname
আমি এটি অপসারণ করা প্রয়োজন Lname
এটা কিভাবে করতে হবে?
উত্তর:
ALTER TABLE MEN DROP COLUMN Lname
আপনার উদাহরণটি সহজ এবং কোনও অতিরিক্ত টেবিল পরিবর্তনের প্রয়োজন নেই তবে সাধারণত এটি বলা তুচ্ছ নয়।
যদি এই কলামটি অন্য টেবিলগুলি দ্বারা উল্লেখ করা হয় তবে আপনাকে অন্যান্য টেবিল / কলামগুলির সাথে কী করবেন তা নির্ধারণ করতে হবে। একটি বিকল্প হ'ল বিদেশী কীগুলি সরানো এবং অন্যান্য টেবিলে রেফারেন্স করা ডেটা রাখা।
অন্য বিকল্পটি হ'ল সমস্ত রেফারেন্সিং কলামগুলি সন্ধান করা এবং সেগুলির আর প্রয়োজন না হলে সেগুলি সরিয়ে ফেলুন।
এই ধরনের ক্ষেত্রে আসল চ্যালেঞ্জ হ'ল সমস্ত বিদেশী কী খুঁজে পাওয়া। আপনি সিস্টেম টেবিলগুলি অনুসন্ধান করে বা তৃতীয় পক্ষের সরঞ্জামগুলি যেমন অ্যাপেক্সএসকিউএল অনুসন্ধান (ফ্রি) বা রেড গেট নির্ভরতা ট্র্যাকার (প্রিমিয়াম তবে আরও বৈশিষ্ট্য) ব্যবহার করে এটি করতে পারেন। বিদেশী কীগুলিতে একটি সম্পূর্ণ থ্রেড এখানে
এটা সঠিক উত্তর:
ALTER TABLE MEN DROP COLUMN Lname
কিন্তু ... একটি CONSTRAINT
বিদ্যমান COLUMN
, তাহলে আপনি আবশ্যক প্রথম, তারপর আপনি করতে সক্ষম হবে । একটি ড্রপ করার জন্য , চালান:DROP
CONSTRAINT
DROP
COLUMN
CONSTRAINT
ALTER TABLE MEN DROP CONSTRAINT {constraint_name_on_column_Lname}
constraint
একটি জন্য কলাম ?
ইন SQL সার্ভার 2016 আপনি নতুন ডাই বিবৃতি ব্যবহার করতে পারেন।
ALTER TABLE Table_name DROP COLUMN IF EXISTS Column_name
উপরের ক্যোয়ারীটি কেবল drops
তখনই কলামটি এটি পুনরায় চালিত হয়exists
অন্য টেবিলে থাকে তবে এটি ত্রুটি ছুঁড়ে না ফেলে।
বড় বড় IF
মোড়ক ব্যবহারের পরিবর্তে column
এটি ফেলে দেওয়ার আগে অস্তিত্ব পরীক্ষা করতে আপনি কেবল উপরের DDL
স্টেটমেন্টটি চালাতে পারেন
প্রশ্নটি হল, আপনি কি কেবল একটি অনাবিল টেবিল থেকে কলামটি মুছতে পারবেন ;-)
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
এর সহজ উত্তরটি এটি ব্যবহার করা:
ALTER TABLE MEN DROP COLUMN Lname;
একাধিক কলাম এইভাবে নির্দিষ্ট করা যেতে পারে:
ALTER TABLE MEN DROP COLUMN Lname, secondcol, thirdcol;
এসকিউএল সার্ভার 2016 থেকে কেবল কলামটি বিদ্যমান থাকলে কেবল তা ফেলে দেওয়াও সম্ভব। কলামটি উপস্থিত না থাকায় এটি আপনাকে ত্রুটি পেতে বাধা দেয় যা এমন কিছু যা সম্ভবত আপনি পাত্তা না।
ALTER TABLE MEN DROP COLUMN IF EXISTS Lname;
কলাম বাদ দেওয়ার জন্য কিছু পূর্বশর্ত রয়েছে। বাদ দেওয়া কলামগুলি এটি হতে পারে না:
উপরের যে কোনওটি যদি সত্য হয় তবে আপনাকে প্রথমে সেই সমিতিগুলি ফেলে দেওয়া উচিত।
এছাড়াও, এটি লক্ষ করা উচিত, যে কোনও কলামটি ড্রপ করা টেবিলের ক্লাস্টার্ড সূচকটি পুনরায় তৈরি না করা পর্যন্ত হার্ড ডিস্ক থেকে স্থানটি পুনরায় দাবি করে না। সারণীর পুনর্নির্মাণ কমান্ডের সাহায্যে উপরের অংশটি অনুসরণ করা প্রায়শই ভাল ধারণা:
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;
তবে সতর্ক হতে হবে এখানে প্রথম নির্বাচন এবং শেষ নামকরণ কমান্ডের মধ্যে সন্নিবেশ করা সারিগুলির ডেটা হ্রাসের জন্য একটি উইন্ডো রয়েছে।
এটি এসএসএমএস জিইআইয়ের মাধ্যমেও করা যেতে পারে। এই পদ্ধতির সুন্দর জিনিসটি হ'ল আপনাকে সতর্ক করে দিচ্ছে যদি সেই কলামে কোনও সম্পর্ক থাকে এবং সেগুলিও স্বয়ংক্রিয়ভাবে মুছতে পারে।
যেমনটি আমি আগেই বলেছি, যদি এমন কোনও সম্পর্ক থাকে যা মুছে ফেলাও দরকার হয়, আপনি যদি সেগুলিও মুছে ফেলতে চান তবে এই মুহুর্তে আপনাকে জিজ্ঞাসা করবে। কলামটি মুছতে আপনার সম্ভবত এটি করতে হবে।
আপনি যদি সি # ব্যবহার করছেন এবং পরিচয় কলামটি অন্তর্নির্মিত হয় তবে এর কোনও মূল্য না দিয়ে ইন্টের একটি নতুন উদাহরণ তৈরি করুন t এটি আমার পক্ষে কাজ করেছে।
[পরিচয়_ কলাম] = নতুন ইনট ()
বাক্য গঠন:
ALTER TABLE TABLE_NAME DROP COLUMN COLUMN_NAME;
উদাহরণ স্বরূপ:
alter table Employee drop column address;