ड्रॉप अगर वी.एस.


163

क्या कोई मुझे बता सकता है कि क्या कोई अंतर है

DROP IF EXISTS [TABLE_NAME]
DROP [TABLE_NAME]

मैं यह इसलिए पूछ रहा हूं क्योंकि मैं अपने MVC वेब एप्लिकेशन में JDBC टेम्पलेट का उपयोग कर रहा हूं। यदि मैं DROP [TABLE_NAME]त्रुटि का उपयोग करता हूं तो कहा गया है कि तालिका मौजूद है। और अगर मैं इसका उपयोग DROP IF EXISTS [TABLE_NAME]करता हूं तो यह बुरा SQL व्याकरण कहता है। क्या कोई मदद कर सकता है?


1
यदि आप SQL सर्वर व्याकरण की तलाश में हैं, तो यह यहाँ है: stackoverflow.com/questions/7887011/…
आकर्षित डेलो

मुझे लगता है कि यह किस विशिष्ट डेटाबेस के लिए प्रश्न पर एक टैग होना चाहिए।
टॉम स्टिकेल

जवाबों:


293

मानक SQL सिंटैक्स है

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;

बड़े ध्यान से CASCADE का उपयोग करें।


6
बस सोचा था कि मैं उल्लेख करूंगा कि यह एक लेनदेन ब्लॉक ( ... ) में उपयोग करने के लिए वास्तव में एक अच्छा विचार होगा । इस तरह से यह स्पष्ट है कि डेटा का एक गुच्छा संभावित रूप से बंद करने से पहले डेटाबेस कैसे प्रभावित होगा जो आप नहीं चाहते थे। CASCADEBEGINCOMMIT
जूलमैन

3
DROP IF EXISTS (बिना CASCADE) के भी SQL Server 2016 में जोड़ा गया है। blogs.msdn.com/b/sqlserverstorageengine/archive/2015/11/03/…
Jovan MSFT

35

यह वह नहीं है जो सीधे पूछा जाता है। लेकिन ड्रॉप टेबल को ठीक से कैसे करना है, इसकी तलाश में मैं इस सवाल पर लड़खड़ा गया, क्योंकि मुझे लगता है कि कई अन्य लोग भी ऐसा करते हैं।

SQL Server 2016+ से आप उपयोग कर सकते हैं

DROP TABLE IF EXISTS dbo.Table

SQL सर्वर <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 और इसके बारे में भूल जाते हैं।

बेशक, आपका वर्तमान डीबी इंजन इस विकल्प का समर्थन नहीं कर सकता है, आपके द्वारा प्रदान की गई जानकारी के साथ त्रुटि के बारे में अधिक बताना मुश्किल है।


यह भी ध्यान देने योग्य हो सकता है कि कुछ RDBMS (विशेष रूप से PostgreSQL) यदि आप कोशिश करते हैं drop some_table if exists;और मेज some_tableमौजूद नहीं है , तो एक चेतावनी फेंक दें ।

आह, और निश्चित रूप से juegen d और Flakron सही हैं। DROPजरूरत है कि आप वस्तु का प्रकार ( TABLEइस मामले में)
SJuan76
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.