एक रिलेशनल डेटाबेस के रूप में अत्यंत शक्तिशाली होने पर, SQL सर्वर कभी-कभी कुछ कठिन हो सकता है जब डेटाबेस सिस्टम के बारे में अंतर्निहित जानकारी को देखने की बात आती है।
कुछ छोटे हिस्से में इन सिरदर्दों को दूर करने के लिए, हम संक्षेप में पता लगाएंगे कि डेटाबेस में सभी तालिकाओं को कैसे खोजा जाए जिसमें विशेष कॉलम नाम हो ।
SQL सर्वर कैटलॉग दृश्य
SQL सर्वर के बारे में समझने के लिए एक बुनियादी अवधारणा है catalog views
, जो प्रभावी रूप से डेटाबेस टेबल हैं (catalogs
इस मामले में) जो SQL सर्वर डेटाबेस इंजन के बारे में सिस्टम-व्यापी जानकारी प्रदर्शित करता है।
सिस्टम जानकारी की क्वेरी करना
सभी catalog views
एक SELECT
. के माध्यम से एक्सेस किया जाता है SQL कथन FROM
sys.
. के भीतर एक विशिष्ट कैटलॉग नाम स्थान।
उदाहरण के लिए, निम्न कथन का उपयोग सिस्टम में सभी डेटाबेस तालिकाओं के बारे में sys.tables
के माध्यम से जानकारी देखने के लिए किया जा सकता है कैटलॉग:
SELECT
*
FROM
sys.tables
LIKE Statement और Wildcard Character
इससे पहले कि हम किसी विशेष नाम से सभी तालिकाओं को निकालने का तरीका जानें, हमें संक्षेप में यह पता लगाना चाहिए कि LIKE
क्या है स्टेटमेंट करता है, साथ ही वाइल्डकार्ड (%
.) ) प्रतीक, और उनका एक साथ उपयोग कैसे किया जाता है।
LIKE
यह निर्धारित करने के लिए एक क्वेरी में प्रयोग किया जाता है कि क्या वर्णों का एक विशेष पैटर्न (आमतौर पर एक निर्दिष्ट column
के मान) ) वर्णों के स्वरूपित स्ट्रिंग से मेल खाता है।
LIKE
अक्सर %
. के संयोजन में भी प्रयोग किया जाता है चरित्र, जो पैटर्न से मेल खाने का प्रयास करते समय वाइल्डकार्ड का प्रतिनिधित्व करता है। जब एक %
वाइल्डकार्ड वर्ण पैटर्न स्ट्रिंग में मौजूद है, यह इंगित करता है कि कोई भी वर्ण पैटर्न स्ट्रिंग के उस स्थान पर मौजूद हो सकते हैं और फिर भी उन्हें एक मैच माना जा सकता है।
उदाहरण के लिए, यदि हम उन सभी पुस्तकों को ढूँढना चाहते हैं जहाँ title
शुरू होता है "द" के साथ लेकिन उसके बाद कोई भी वर्ण हो सकता है, हम इस तरह के एक बयान का उपयोग करेंगे:
SELECT
title,
primary_author,
published_date
FROM
books
WHERE
title LIKE 'The %'
चौकस पाठकों को यह महसूस हो सकता है कि उपरोक्त पैटर्न न केवल उन शीर्षकों से मेल खाएगा जिनकी शुरुआत में "द" था, बल्कि किसी भी शीर्षक के साथ केवल तीन अक्षरों "द" से शुरू होने वाले शब्दों के साथ भी। चूंकि %
वाइल्डकार्ड किसी भी वर्ण से मेल खाते हैं, यदि हम केवल "द" शब्द के साथ शीर्षकों की जांच करना चाहते हैं, तो एक स्थान जोड़ना अधिक उपयुक्त है:
SELECT
title,
primary_author,
published_date
FROM
books
WHERE
title LIKE 'The %'
एक कॉलम नाम वाली टेबल्स का चयन करना
catalog views
. दोनों के हमारे बुनियादी ज्ञान के साथ और LIKE
कथन, अब हम अपने सिस्टम में उन सभी तालिकाओं को देखने के लिए सुसज्जित हैं जिनमें एक विशेष कॉलम नाम है:
SELECT
sys.columns.name AS ColumnName,
tables.name AS TableName
FROM
sys.columns
JOIN sys.tables ON
sys.columns.object_id = tables.object_id
WHERE
sys.columns.name = 'ColumnName'
हमें दो . से जानकारी को संयोजित करने की आवश्यकता है कैटलॉग, sys.tables
और sys.columns
, इसलिए हम एक JOIN
. का उपयोग कर रहे हैं बयान। दोनों object_id
. से जुड़े हुए हैं फ़ील्ड, इसलिए हम JOIN
उस मैदान पर।
वहां से, ColumnName
. का चयन करना एक साधारण बात है और TableName
हमारे परिणामों की, और अंत में, निश्चित रूप से, केवल उन रिकॉर्ड्स को देख रहे हैं जहां sys.columns.name
हमारे ColumnName
. के बराबर है स्ट्रिंग।
हालांकि, इस क्वेरी को केवल सटीक मिलान मिलेगा कॉलम के नाम से। यदि हम आंशिक मिलान खोजना चाहते हैं, तो हम LIKE
. का उपयोग कर सकते हैं और %
इसके बजाय वाइल्डकार्ड वर्ण:
SELECT
sys.columns.name AS ColumnName,
tables.name AS TableName
FROM
sys.columns
JOIN sys.tables ON
sys.columns.object_id = tables.object_id
WHERE
sys.columns.name LIKE '%ColumnName%'
वहाँ हमारे पास है! एक विशेष (या समान) कॉलम नाम के साथ सभी तालिकाओं और संबद्ध स्तंभों को देखने के लिए एक सरल क्वेरी।