T-SQL में IF NOT EXISTS
. शामिल नहीं है इसके CREATE TABLE
. के साथ क्लॉज कथन, जैसे कुछ अन्य DBMS करते हैं।
इसलिए, यदि हम इसे SQL सर्वर में बनाने से पहले तालिका के अस्तित्व की जांच करना चाहते हैं, तो हमें अन्य विधियों का उपयोग करने की आवश्यकता है।
विकल्प 1:ऑब्जेक्ट आईडी जांचें
SQL सर्वर में, हम OBJECT_ID()
. का उपयोग कर सकते हैं तालिका को बनाने का प्रयास करने से पहले उसके अस्तित्व की जाँच करने के लिए कार्य करता है:
IF OBJECT_ID(N'dbo.t1', N'U') IS NULL
CREATE TABLE dbo.t1 (
c1 int,
c2 varchar(10)
);
GO
उपरोक्त उदाहरण dbo.t1
. के लिए ऑब्जेक्ट आईडी की जांच करता है टेबल।
दूसरा तर्क OBJECT_ID()
उस वस्तु के प्रकार को निर्दिष्ट करता है जिसकी हम तलाश कर रहे हैं। इस मामले में हम U
. का उपयोग करते हैं , जो "उपयोगकर्ता परिभाषित तालिका" के लिए है।
OBJECT_ID()
स्कीमा-स्कोप्ड ऑब्जेक्ट की डेटाबेस ऑब्जेक्ट पहचान संख्या देता है। यदि ऑब्जेक्ट मौजूद नहीं है, या यदि आपके पास उस तक पहुंच नहीं है, तो फ़ंक्शन NULL लौटाता है। इसलिए, हम NULL मान की जांच कर सकते हैं, और केवल तभी तालिका बना सकते हैं जब यह फ़ंक्शन NULL लौटाए।
हम OBJECT_ID()
. का उपयोग कर सकते हैं तालिका के ऑब्जेक्ट आईडी बनने के बाद उसकी जाँच करने के लिए कार्य करता है:
SELECT OBJECT_ID(N'dbo.t1', N'U');
उदाहरण परिणाम:
354100302
अगर हमें थोड़ी और जानकारी चाहिए, तो हम कुछ ऐसा कर सकते हैं:
sp_tables 't1';
परिणाम:
+-------------------+---------------+--------------+--------------+-----------+ | TABLE_QUALIFIER | TABLE_OWNER | TABLE_NAME | TABLE_TYPE | REMARKS | |-------------------+---------------+--------------+--------------+-----------| | KrankyKranes | dbo | t1 | TABLE | NULL | +-------------------+---------------+--------------+--------------+-----------+
यहाँ, KrankyKranes
वह डेटाबेस है जिसमें मैंने तालिका बनाई है।
मौजूदा तालिकाओं को देखने के कई अन्य तरीके हैं। उदाहरण के लिए SQL सर्वर में तालिका मौजूद है या नहीं, यह जांचने के 6 तरीके देखें।
विकल्प 2:क्वेरी sys.tables
यह जांचने का एक और तरीका है कि कोई तालिका पहले से मौजूद है या नहीं sys.tables
. को क्वेरी करना है सिस्टम कैटलॉग व्यू।
उदाहरण:
IF NOT EXISTS (
SELECT * FROM sys.tables t
JOIN sys.schemas s ON (t.schema_id = s.schema_id)
WHERE s.name = 'dbo' AND t.name = 't1')
CREATE TABLE dbo.t1 (
c1 int,
c2 varchar(10)
);
यह पिछले उदाहरण के समान काम करता है; यह तालिका के अस्तित्व की जाँच करता है और इसे केवल तभी बनाता है जब यह मौजूद न हो।
तालिका के अस्तित्व की जांच करने के लिए उपयोग की जाने वाली विधि के बावजूद, आदेश सफलतापूर्वक पूरा होता है, भले ही तालिका मौजूद हो या नहीं।
तो हमें दोनों विधियों से निम्नलिखित आउटपुट मिलते हैं:
Commands completed successfully.
मुझे वह संदेश मिलता है कि तालिका पहले से मौजूद है या नहीं।
यदि तालिका पहले से मौजूद है, लेकिन हम तालिका के अस्तित्व की जांच नहीं करते हैं, तो हमें इस तरह की त्रुटि मिलती है:
Msg 2714, Level 16, State 6, Line 1 There is already an object named 't1' in the database.
यह ध्यान रखना महत्वपूर्ण है कि, सिर्फ इसलिए कि उस नाम की एक तालिका डेटाबेस में पहले से मौजूद है, इसका मतलब यह नहीं है कि इसकी सही परिभाषा है। उपरोक्त विधियां केवल नाम और स्कीमा द्वारा तालिका की जांच करती हैं।