উত্তর:
নিম্নলিখিতগুলি করা কি সঠিক?
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 …
। @ জোভানের উত্তর দেখুন ।
এসকিউএল সার্ভার 2016 থেকে আপনি ব্যবহার করতে পারেন
DROP TABLE IF EXISTS dbo.Scores
তথ্যসূত্র: উপস্থিত থাকলে ড্রপ - এসকিউএল সার্ভার 2016 এ নতুন জিনিস
এটি শীঘ্রই এসকিউএল অ্যাজুরি ডেটাবেসে থাকবে।
এএনএসআই এসকিউএল / ক্রস-প্ল্যাটফর্মের উপায়টি হল 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
আনসি কি কমপ্লায়েন্ট?
এমন অনেকগুলি দেখেছেন যা আসলে কাজ করে না। যখন একটি টেম্প টেবিল তৈরি হয় এটি অবশ্যই টেম্পডিবি থেকে মুছতে হবে!
কেবলমাত্র কোডটি কাজ করে তা হল:
IF OBJECT_ID('tempdb..#tempdbname') IS NOT NULL --Remove dbo here
DROP TABLE #tempdbname -- Remoeve "tempdb.dbo"
dbo
করতে পরিবর্তন tempdb
। আমি 'u'
স্বীকৃত উত্তরের মন্তব্যে উল্লিখিত হিসাবে যুক্ত করার পরামর্শও দিতে চাই। সুতরাং, সম্পূর্ণ আইএফ স্টেটমেন্টটি দেখতে এরকম হবে:IF OBJECT_ID('tempdb..#temp', 'U')
এসকিউএল সার্ভার 2016 (13.x) এবং তারপরে
DROP TABLE IF EXISTS dbo.Scores
পূর্ববর্তী সংস্করণে
IF OBJECT_ID('dbo.Scores', 'U') IS NOT NULL
DROP TABLE dbo.Scores;
ইউ তোমারtable type
বা:
if exists (select * from sys.objects where name = 'Scores' and type = 'u')
drop table Scores
if exists (select * from sys.tables where name = 'Scores') drop table Scores
আমি একটি সামান্য ইউডিএফ লিখেছি যা 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]
সহজ এটি:
IF OBJECT_ID(dbo.TableName, 'U') IS NOT NULL
DROP TABLE dbo.TableName
যেখানে dbo.TableName
আপনার পছন্দসই টেবিল এবং 'ইউ' হয় type
আপনার এর table
।
IF EXISTS (SELECT NAME FROM SYS.OBJECTS WHERE object_id = OBJECT_ID(N'Scores') AND TYPE in (N'U'))
DROP TABLE Scores
GO
আমি ব্যবহার করি:
if exists (select *
from sys.tables
where name = 'tableName'
and schema_id = schema_id('dbo'))
begin
drop table dbo.tableName
end
একটি সহজ উপায় আছে
DROP TABLE IF EXISTS table_name;
একটি ভাল চাক্ষুষ এবং সহজ উপায়, আপনি যদি ভিজ্যুয়াল স্টুডিও ব্যবহার করছেন তবে মেনু বার থেকে খালি,
দেখুন -> এসকিউএল সার্ভার অবজেক্ট এক্সপ্লোরার
এটি এখানে প্রদর্শিত মত খুলতে হবে
আপনি মুছে ফেলতে চান সারণীটি নির্বাচন করুন এবং ডানদিকে ক্লিক করুন, তারপরে মুছুন। যেমন একটি পর্দা প্রদর্শিত হবে। নিশ্চিত করতে ডেটাবেস আপডেট করুন ক্লিক করুন।
এই পদ্ধতিটি খুব নিরাপদ কারণ এটি আপনাকে প্রতিক্রিয়া জানায় এবং অন্য সারণীর সাথে মুছে ফেলা টেবিলের কোনও সম্পর্কের বিষয়ে সতর্ক করবে।
SQL
, সম্পর্কিত নয় Visual Studio
। সুতরাং, এই উত্তরটি এই প্রশ্নের সাথে অপ্রাসঙ্গিক।
এটি করুন, এটি সহজতম উপায়।
qry
আপনি নির্বাচিত তালিকায় যা কিছু চান তা আপনার নিজের ক্যোয়ারী হবে।
set @qry = ' select * into TempData from (' + @qry + ')Tmp '
exec (@qry)
select * from TempData
drop table TempData
'U'
দ্বিতীয় প্যারামের জন্য স্পষ্টতই বোঝা যাচ্ছে "কেবল এই নামের সাথে টেবিলযুক্ত বস্তুর সন্ধান করুন"। একটি উত্স । সুতরাংOBJECT_ID('TableName')
এটি ভুল নয় , তবে এটি খুব মারাত্মকভাবে সুনির্দিষ্ট নয়, এভাবে'U'
@ মার্টিনের দুর্দান্ত উত্তরে।