जवाबों:
क्या निम्न करना सही है?
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;
SQL Server 2016+ का उपयोग करने का एक बेहतर तरीका है DROP TABLE IF EXISTS …
। जवाब देखें @ जोवन ।
SQL Server 2016 से आप उपयोग कर सकते हैं
DROP TABLE IF EXISTS dbo.Scores
संदर्भ: DROP IF EXISTS - SQL सर्वर 2016 में नई बात
यह जल्द ही SQL Azure डेटाबेस में होगा।
ANSI SQL / क्रॉस-प्लेटफ़ॉर्म तरीका INFORMATION_SCHEMA का उपयोग करना है , जो विशेष रूप से SQL डेटाबेस में ऑब्जेक्ट के बारे में मेटा डेटा को क्वेरी करने के लिए डिज़ाइन किया गया था।
if exists (select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME = 'Scores' AND TABLE_SCHEMA = 'dbo')
drop table dbo.Scores;
अधिकांश आधुनिक RDBMS सर्वर, कम से कम, बुनियादी INFORMATION_SCHEMA समर्थन प्रदान करते हैं, जिनमें शामिल हैं: MySQL , Postgres , Oracle , IBM DB2 और Microsoft SQL Server 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 स्टेटमेंट इस तरह दिखाई देगा:IF OBJECT_ID('tempdb..#temp', 'U')
SQL सर्वर 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
अपने वांछित मेज और है 'U' है 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 सर्वर ऑब्जेक्ट एक्सप्लोरर
इसे यहां दिखाए गए की तरह खोलना चाहिए
जिस तालिका को आप हटाना चाहते हैं उसे चुनें और राइट क्लिक करें, फिर हटाएं। ऐसी स्क्रीन प्रदर्शित की जानी चाहिए। पुष्टि करने के लिए अद्यतन डेटाबेस पर क्लिक करें।
यह विधि बहुत सुरक्षित है क्योंकि यह आपको प्रतिक्रिया देता है और अन्य तालिकाओं के साथ हटाए गए तालिका के किसी भी संबंध की चेतावनी देगा।
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'
@ मार्टिन के उत्कृष्ट उत्तर में।