SQL सर्वर में, यदि आप किसी ऐसी वस्तु को छोड़ने का प्रयास करते हैं जो मौजूद नहीं है, तो आपको एक त्रुटि मिलेगी। यदि आप कोई त्रुटि प्राप्त नहीं करना चाहते हैं, तो आपको वस्तु के अस्तित्व की जांच करने के लिए कुछ अतिरिक्त कोड जोड़ने की आवश्यकता होगी।
SQL सर्वर 2016 से पहले, आपको एक IF
जोड़ना होगा वह कथन जो यह पता लगाने के लिए प्रासंगिक सिस्टम ऑब्जेक्ट को क्वेरी करता है कि ऑब्जेक्ट मौजूद है या नहीं।
SQL सर्वर 2016 से, अब आप यह जांचने के लिए एक नई, क्लीनर विधि का उपयोग कर सकते हैं कि कोई ऑब्जेक्ट मौजूद है या नहीं। हम इसे DROP IF EXISTS
. कहेंगे (अन्यथा "डाई" के रूप में जाना जाता है)।
उदाहरण 1 - मूल सिंटैक्स
सिंटैक्स में वास्तव में DROP IF EXISTS
. नहीं होता है स्ट्रिंग जैसा है। आपको क्या करना है DROP
. के बीच ऑब्जेक्ट टाइप डालना है और IF
।
DROP TABLE IF EXISTS Customers
इस मामले में, मैं एक टेबल छोड़ रहा हूं, इसलिए शब्द TABLE
DROP
. के बीच डाला जाता है और IF
. तालिका का नाम जिसे मैं छोड़ना चाहता हूं (इस मामले में ग्राहक ) को अंत में रखा गया है।
उदाहरण 2 - बेसिक डेमो
यहां एक डेटाबेस बनाने, फिर उसे छोड़ने, फिर उसे छोड़ने का प्रयास करने का एक उदाहरण दिया गया है।
CREATE DATABASE Homer; GO DROP DATABASE IF EXISTS Homer; GO DROP DATABASE IF EXISTS Homer; GO
परिणाम:
Started executing query at Line 17 Commands completed successfully. Started executing query at Line 19 Commands completed successfully. Started executing query at Line 21 Commands completed successfully.
कोई त्रुटि नहीं होती है, भले ही मैं एक गैर-मौजूद वस्तु को तीसरी पंक्ति पर छोड़ने का प्रयास करता हूं।
उदाहरण 3 - अगर मौजूद नहीं है
यहाँ यह फिर से है, इस समय को छोड़कर मैं IF EXISTS
. को हटा देता हूँ भाग।
CREATE DATABASE Homer; GO DROP DATABASE Homer; GO DROP DATABASE Homer; GO
परिणाम:
Started executing query at Line 17 Commands completed successfully. Started executing query at Line 19 Commands completed successfully. Started executing query at Line 21 Msg 3701, Level 11, State 1, Line 5 Cannot drop the database 'Homer', because it does not exist or you do not have permission.
इस मामले में मुझे एक त्रुटि मिलती है, क्योंकि यह एक ऐसी वस्तु को छोड़ने की कोशिश कर रहा है जो मौजूद नहीं है।
उदाहरण 4 - कॉलम और बाधाएं
आप कॉलम और बाधाओं पर भी DIE का उपयोग कर सकते हैं।
उदाहरण के लिए, आप DROP COLUMN IF EXISTS
. का उपयोग कर सकते हैं आपके ALTER TABLE
. के भीतर बयान।
यहां एक उदाहरण दिया गया है।
DROP TABLE IF EXISTS DieTest; GO CREATE TABLE DieTest ( DieTestId uniqueidentifier NOT NULL DEFAULT NEWID(), DieTestName varchar(70), InsertDate datetime2(7) NOT NULL DEFAULT GETDATE() ); GO ALTER TABLE DieTest DROP COLUMN IF EXISTS DieTestName; GO ALTER TABLE DieTest DROP COLUMN IF EXISTS DieTestName; GO
परिणाम:
Started executing query at Line 1 Commands completed successfully. Started executing query at Line 3 Commands completed successfully. Started executing query at Line 11 Commands completed successfully. Started executing query at Line 15 Commands completed successfully.
उदाहरण 5 - SQL सर्वर 2016 से पहले
SQL सर्वर 2016 से पहले, किसी ऑब्जेक्ट के अस्तित्व का परीक्षण करने के लिए, आपको कुछ ऐसा करने की आवश्यकता होगी:
IF DB_ID('Homer') IS NOT NULL DROP DATABASE Homer;
वह उदाहरण DB_ID()
. का उपयोग करता है क्योंकि हम एक डेटाबेस के साथ काम कर रहे हैं। यदि वस्तु भिन्न प्रकार की थी, तो आपको OBJECT_ID()
. का उपयोग करने की आवश्यकता हो सकती है समारोह या कुछ और पूरी तरह से।
उदाहरण के लिए:
IF OBJECT_ID('dbo.Customers, 'U') IS NOT NULL DROP TABLE dbo.Customers; IF EXISTS (SELECT * FROM sys.triggers WHERE name = 'MyTrigger') DROP TRIGGER MyTrigger
एक बार जब हम इस कोड को देखना शुरू करते हैं, तो हम देख सकते हैं कि DROP IF EXISTS
. क्यों है? T-SQL सिंटैक्स में एक स्वागत योग्य अतिरिक्त है।
योग्य वस्तुएं
DIE का उपयोग निम्नलिखित वस्तुओं पर किया जा सकता है।
सकल | <टीडी> |
विधानसभा | <टीडी> |
देखें | <टीडी> |
डेटाबेस | <टीडी> |
डिफ़ॉल्ट | <टीडी> |
समारोह | <टीडी> |
सूचकांक | <टीडी>
जैसा कि उल्लेख किया गया है, ALTER TABLE
. का उपयोग करते समय DIE का उपयोग कॉलम और बाधाओं पर भी किया जा सकता है कथन:
- यदि मौजूद है तो टेबल ड्रॉप कॉलम में बदलाव करें
- यदि मौजूद है तो टेबल ड्रॉप की कमी को बदलें