কোনও টেবিল থাকলে তা কীভাবে ফেলে দেওয়া যায়?


721

টেবিলের নাম Scores

নিম্নলিখিতগুলি করা কি সঠিক?

IF EXISTS(SELECT *
          FROM   dbo.Scores)
  DROP TABLE dbo.Scores

উত্তর:


1376

নিম্নলিখিতগুলি করা কি সঠিক?

IF EXISTS(SELECT *
          FROM   dbo.Scores)
  DROP TABLE dbo.Scores

না। এটি কেবলমাত্র এতে কোনও সারি থাকলে টেবিলটি ফেলে দেবে (এবং টেবিলটি উপস্থিত না থাকলে একটি ত্রুটি বাড়িয়ে তুলবে)।

পরিবর্তে, একটি স্থায়ী টেবিলের জন্য আপনি ব্যবহার করতে পারেন

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

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

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

এসকিউএল সার্ভার 2016+ এর ব্যবহারের আরও ভাল উপায় রয়েছে DROP TABLE IF EXISTS …@ জোভানের উত্তর দেখুন ।


137
ফিউইউউ - 'U'দ্বিতীয় প্যারামের জন্য স্পষ্টতই বোঝা যাচ্ছে "কেবল এই নামের সাথে টেবিলযুক্ত বস্তুর সন্ধান করুন"। একটি উত্স । সুতরাং OBJECT_ID('TableName')এটি ভুল নয় , তবে এটি খুব মারাত্মকভাবে সুনির্দিষ্ট নয়, এভাবে 'U'@ মার্টিনের দুর্দান্ত উত্তরে।
ruffin

7
দ্বিতীয় পরম সম্পর্কে; এখানে অন্য উত্স , আমি একটি ভিউর জন্য 'ভি' ব্যবহার করেছি।
লাল মটর

4
এইচআই, আপনি কি আমাকে ব্যাখ্যা করতে পারেন যে এই দ্বিতীয় পরামিতিটি OBJECT_ID ('tempdb.dbo। # T', 'U') এর অর্থ কী, উদাহরণস্বরূপ এই 'ইউ'?
Zvonimir টোকিক

9
@ জোভনিমিরটোকিক এর অর্থ "ব্যবহারকারীর সংজ্ঞায়িত ছক"। "আইটি" একটি অভ্যন্তরীণ, সিস্টেম সংজ্ঞায়িত, সারণী হবে। একটি সম্পূর্ণ তালিকা এখানে এমএসডিএন.মাইক্রোসফটকম /en-us/library/ms190324.aspx
মার্টিন স্মিথ

373

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

DROP TABLE IF EXISTS dbo.Scores

তথ্যসূত্র: উপস্থিত থাকলে ড্রপ - এসকিউএল সার্ভার 2016 এ নতুন জিনিস

এটি শীঘ্রই এসকিউএল অ্যাজুরি ডেটাবেসে থাকবে।


151

এএনএসআই এসকিউএল / ক্রস-প্ল্যাটফর্মের উপায়টি হল INFORMATION_SCHEMA ব্যবহার করা , যা বিশেষত এসকিউএল ডাটাবেসের মধ্যে অবজেক্টগুলি সম্পর্কে মেটা ডেটা অনুসন্ধান করার জন্য তৈরি করা হয়েছিল।

if exists (select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME = 'Scores' AND TABLE_SCHEMA = 'dbo')
    drop table dbo.Scores;

সর্বাধিক আধুনিক আরডিবিএমএস সার্ভারগুলি অন্তত: বেসিক INFORMATION_SCHEMA সহায়তা সরবরাহ করে, যার মধ্যে রয়েছে: মাইএসকিউএল , পোস্টগ্রিস , ওরাকল , আইবিএম ডিবি 2 , এবং মাইক্রোসফ্ট এসকিউএল সার্ভার 7.0 (এবং আরও বেশি)


if existsআনসি কি কমপ্লায়েন্ট?
মার্টিন স্মিথ

8
আপনার যদি ডাটাবেসে একাধিক স্কিমা থাকে তবে সাবধান হন। কোনটি [স্কোর] আপনি সনাক্ত করছেন এবং মুছে ফেলছেন তা সম্পর্কে আপনার নির্দিষ্ট হওয়া দরকার। যেমন WHERE TABLE_NAME = 'স্কোর' এবং ট্যাবলেট_সচেমি = 'ডিবিও'
অ্যান্ড্রু জেনস

@ কুইকিনেট সাধারণত হ্যাঁ, তবে যদি উপস্থিত থাকে তবে এটি ব্যবহার করার সময় নয় - যেহেতু এটি এক সারি ফেরার সাথে সাথে এটি বন্ধ হয়ে যায়। তবে আমি ব্যক্তিগতভাবে সবসময় যাইহোক 1 টি নির্বাচন করি।
হারাগ

68

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

কেবলমাত্র কোডটি কাজ করে তা হল:

IF OBJECT_ID('tempdb..#tempdbname') IS NOT NULL     --Remove dbo here 
    DROP TABLE #tempdbname   -- Remoeve "tempdb.dbo"

3
ধন্যবাদ, এই কাজটি dboকরতে পরিবর্তন tempdb। আমি 'u'স্বীকৃত উত্তরের মন্তব্যে উল্লিখিত হিসাবে যুক্ত করার পরামর্শও দিতে চাই। সুতরাং, সম্পূর্ণ আইএফ স্টেটমেন্টটি দেখতে এরকম হবে:IF OBJECT_ID('tempdb..#temp', 'U')
হোয়াইটসুউজ

38

এসকিউএল সার্ভার 2016 (13.x) এবং তারপরে

DROP TABLE IF EXISTS dbo.Scores

পূর্ববর্তী সংস্করণে

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

ইউ তোমারtable type


28

বা:

if exists (select * from sys.objects where name = 'Scores' and type = 'u')
    drop table Scores

4
এটি সহজ করার জন্য আপনি ২০০ 2005 সাল থেকে সিস.টেবেলগুলি ব্যবহার করতে পারেন:if exists (select * from sys.tables where name = 'Scores') drop table Scores
মাইকেল পার্কার

26

আশা করি এটা কাজে লাগবে:

begin try drop table #tempTable end try
begin catch end catch

22

আমি একটি সামান্য ইউডিএফ লিখেছি যা 1 টি প্রদান করে যদি এর যুক্তিটি একটি বিদ্যমান টেবিলের নাম, অন্যথায় 0:

CREATE FUNCTION [dbo].[Table_exists]
(
    @TableName VARCHAR(200)
)
    RETURNS BIT
AS
BEGIN
    If Exists(select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME = @TableName)
        RETURN 1;

    RETURN 0;
END

GO

টেবিলটি Userউপস্থিত থাকলে মুছে ফেলার জন্য , এটিকে এভাবে কল করুন:

IF [dbo].[Table_exists]('User') = 1 Drop table [User]

একই নাম কিন্তু বিভিন্ন স্কিমা সম্পর্কে কি? : সেরা উপায় এখানে stackoverflow.com/a/33497857/956364
Protiguous

9

সহজ এটি:

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

যেখানে dbo.TableNameআপনার পছন্দসই টেবিল এবং 'ইউ' হয় typeআপনার এর table



4

আমি ব্যবহার করি:

if exists (select * 
           from sys.tables 
           where name = 'tableName' 
           and schema_id = schema_id('dbo'))
begin
    drop table dbo.tableName
end


-1

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

দেখুন -> এসকিউএল সার্ভার অবজেক্ট এক্সপ্লোরার

এটি এখানে প্রদর্শিত মত খুলতে হবে

এখানে চিত্র বর্ণনা লিখুন

আপনি মুছে ফেলতে চান সারণীটি নির্বাচন করুন এবং ডানদিকে ক্লিক করুন, তারপরে মুছুন। যেমন একটি পর্দা প্রদর্শিত হবে। নিশ্চিত করতে ডেটাবেস আপডেট করুন ক্লিক করুন।

এখানে চিত্র বর্ণনা লিখুন

এই পদ্ধতিটি খুব নিরাপদ কারণ এটি আপনাকে প্রতিক্রিয়া জানায় এবং অন্য সারণীর সাথে মুছে ফেলা টেবিলের কোনও সম্পর্কের বিষয়ে সতর্ক করবে।


5
এই প্রশ্নটি সম্পর্কিত SQL, সম্পর্কিত নয় Visual Studio। সুতরাং, এই উত্তরটি এই প্রশ্নের সাথে অপ্রাসঙ্গিক।
আদনান শরীফ

-8

এটি করুন, এটি সহজতম উপায়।

qry আপনি নির্বাচিত তালিকায় যা কিছু চান তা আপনার নিজের ক্যোয়ারী হবে।

set @qry = ' select * into TempData from (' + @qry + ')Tmp  '

exec (@qry)

select * from TempData 

drop table TempData

4
এটি কি কেবল আমার, বা এটি ইঞ্জেকশনের প্রবণর মতো দেখাচ্ছে? অনুগ্রহ করে মন্তব্য করুন.
g00dy

5
প্রশ্নটির সাথে এর কোনও
মার্টিন স্মিথ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.