ড্রপ যদি ভিএস ড্রপ উপস্থিত থাকে?


163

কেউ পার্থক্য আছে কিনা আমাকে বলতে পারেন

DROP IF EXISTS [TABLE_NAME]
DROP [TABLE_NAME]

আমি এটি জিজ্ঞাসা করছি কারণ আমি আমার এমভিসি ওয়েব অ্যাপ্লিকেশনটিতে জেডিবিসি টেম্পলেট ব্যবহার করছি। আমি যদি DROP [TABLE_NAME]ত্রুটিটি ব্যবহার করি তবে সারণির উপস্থিতি বলেছিল। এবং আমি DROP IF EXISTS [TABLE_NAME]এটি ব্যবহার করে খারাপ এসকিউএল ব্যাকরণ বলে। কেউ সাহায্য করতে পারেন?


1
আপনি এসকিউএল সার্ভার ব্যাকরণ খুঁজছেন থাকেন, তবে তা এখানে দেওয়া হল: stackoverflow.com/questions/7887011/...
ড্রিউ আইনজীবীরা Delano

আমি মনে করি কোন নির্দিষ্ট ডাটাবেসটির জন্য এটিতে প্রশ্নের একটি ট্যাগ থাকা উচিত।
টম স্টিকেল

উত্তর:


293

স্ট্যান্ডার্ড এসকিউএল সিনট্যাক্স হয়

DROP TABLE table_name;

IF EXISTSমান নয়; বিভিন্ন প্ল্যাটফর্মগুলি এটিকে বিভিন্ন সিনট্যাক্স সহ সমর্থন করতে পারে বা একেবারেই সমর্থন করে না। PostgreSQL এ সিনট্যাক্সটি

DROP TABLE IF EXISTS table_name;

টেবিলটি উপস্থিত না থাকলে বা অন্য ডাটাবেস অবজেক্টের উপর নির্ভর করে তবে প্রথমটি একটি ত্রুটি ফেলবে। প্রায়শই, অন্যান্য ডাটাবেস অবজেক্টগুলি বিদেশী কী উল্লেখগুলি হয়, তবে অন্যগুলিও থাকতে পারে। (উদাহরণস্বরূপ, দেখুন)) সারণীটি উপস্থিত না থাকলে দ্বিতীয়টি ত্রুটি ছুঁড়ে ফেলবে না, তবে অন্য ডাটাবেস অবজেক্টের উপর নির্ভর করে এটি ত্রুটি ছুঁড়ে ফেলবে।

একটি টেবিল এবং অন্যান্য সমস্ত বস্তু যা এর উপর নির্ভর করে সেগুলি ফেলে দিতে, এর মধ্যে একটি ব্যবহার করুন।

DROP TABLE table_name CASCADE;
DROP TABLE IF EXISTS table_name CASCADE;

খুব যত্ন সহকারে ক্যাসকেড ব্যবহার করুন।


6
কেবল ভেবেছি যে আমি উল্লেখ করেছি যে এটি কোনও লেনদেনের ব্লক ( ... ) এর মধ্যে ব্যবহার করা সত্যিই খুব ভাল ধারণা । এইভাবে এটি স্পষ্ট যে আপনি সম্ভবত না চান এমন একগুচ্ছ ডেটা সম্ভাব্যভাবে ক্লোবার্ব করার আগে কীভাবে ডাটাবেস প্রভাবিত হবে । CASCADEBEGINCOMMIT
jboman

3
ড্রপ যদি বিদ্যমান (CASCADE ছাড়া) এছাড়াও SQL সার্ভার সংযোজন করা হয় 2016. দেখুন blogs.msdn.com/b/sqlserverstorageengine/archive/2015/11/03/...
Jovan MSFT

35

সরাসরি জিজ্ঞাসা করা হয় তা নয়। তবে কীভাবে ড্রপ টেবিলগুলি সঠিকভাবে করা যায় তা সন্ধান করে আমি এই প্রশ্নটিতে হোঁচট খেয়েছি, যেমন আমার অনুমান অন্যান্য অনেকেও করেন।

এসকিউএল সার্ভার 2016+ থেকে আপনি ব্যবহার করতে পারেন

DROP TABLE IF EXISTS dbo.Table

এসকিউএল সার্ভারের জন্য <2016 আমি যা করি তা স্থায়ী টেবিলের জন্য নিম্নলিখিত

IF OBJECT_ID('dbo.Table', 'U') IS NOT NULL 
  DROP TABLE dbo.Table; 

বা এটি, একটি অস্থায়ী টেবিলের জন্য

IF OBJECT_ID('tempdb.dbo.#T', 'U') IS NOT NULL
  DROP TABLE #T; 

17

আপনি tableআপনার সিনট্যাক্স এ ভুলে গেছেন :

drop table [table_name]

যা একটি টেবিল ড্রপ।

ব্যবহার

drop table if exists [table_name]

টেবিলটি নামানোর আগে উপস্থিত রয়েছে কিনা তা পরীক্ষা করে দেখুন।
এটি উপস্থিত থাকলে, এটি বাদ পড়ে যায়।
যদি তা না হয় তবে কোনও ত্রুটি নিক্ষেপ করা হবে না এবং কোনও পদক্ষেপ নেওয়া হবে না।


4
DROP TABLE IF EXISTS [table_name]

এটি প্রথম টেবিলে টেবিলের উপস্থিতি আছে কিনা তা এটি পরীক্ষা করে যখন এটি টেবিলটি মুছে দেয়

DROP TABLE [table_name]

এটি পরীক্ষা না করে মুছে ফেলা হয়, সুতরাং এটি উপস্থিত না থাকলে এটি একটি ত্রুটি সহ প্রস্থান করে


3

যদি এই জাতীয় নামের কোনও সারণী উপস্থিত না থাকে DROPতবে কিছু সময় ত্রুটি সহ ব্যর্থ হয়DROP IF EXISTS না থাকে তবে কিছু না করে ।

আপনি যদি কোনও স্ক্রিপ্ট দিয়ে আপনার ডাটাবেস তৈরি / সংশোধন করেন তবে এটি কার্যকর; এইভাবে আপনাকে টেবিলে আগের সংস্করণগুলি মুছে ফেলা হয়েছে তা ম্যানুয়ালি নিশ্চিত করতে হবে না। আপনি শুধু একটিDROP IF EXISTS এবং এটি সম্পর্কে ভুলে যান

অবশ্যই, আপনার বর্তমান ডিবি ইঞ্জিন এই বিকল্পটিকে সমর্থন করতে পারে না, আপনার সরবরাহিত তথ্য দিয়ে ত্রুটি সম্পর্কে আরও কিছু বলা শক্ত।


এটি উল্লেখ করার মতোও হতে পারে যে কিছু আরডিবিএমএস (বিশেষত পোস্টগ্রিএসকিউএল) যদি আপনি চেষ্টা করেন drop some_table if exists;এবং টেবিলের some_tableঅস্তিত্ব না থাকে তবে তারা একটি সতর্কতা ফেলে দেয়।

আহ, এবং অবশ্যই জুগেন ডি এবং ফ্ল্যাক্রন ঠিক আছে। DROPআপনার বস্তুর ধরণ নির্দিষ্ট করতে হবে ( TABLEএই ক্ষেত্রে)
এসজেয়ান 7676
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.