INFORMATION_SCHEMA
. नामक एक स्कीमा है स्कीमा जिसमें SYS स्कीमा से तालिकाओं पर दृश्यों का एक सेट होता है जिसे आप जो चाहते हैं उसे प्राप्त करने के लिए क्वेरी कर सकते हैं।
INFORMATION_SCHEMA
. का एक बड़ा फायदा यह है कि वस्तु के नाम बहुत ही अनुकूल और उपयोगकर्ता पठनीय हैं। INFORMATION_SCHEMA
. का नकारात्मक पहलू यह है कि आपको प्रत्येक प्रकार की वस्तु के लिए एक प्रश्न लिखना है।
Sys स्कीमा शुरू में थोड़ा गूढ़ लग सकता है, लेकिन इसमें एक ही स्थान पर सभी समान जानकारी (और अधिक) होती है।
आप SysObjects नामक तालिका से शुरू करेंगे (प्रत्येक डेटाबेस में एक है) जिसमें सभी ऑब्जेक्ट्स और उनके प्रकार के नाम होते हैं।
कोई एक डेटाबेस में इस प्रकार खोज सकता है:
Select [name] as ObjectName, Type as ObjectType
From Sys.Objects
Where 1=1
and [Name] like '%YourObjectName%'
and Type in ('U', 'P')
अब, यदि आप इसे केवल टेबल और संग्रहीत प्रोसेस की खोज तक सीमित रखना चाहते हैं, तो आप ऐसा करेंगे
Select [name] as ObjectName, Type as ObjectType
From Sys.Objects
Where 1=1
and [Name] like '%YourObjectName%'
and Type in ('U', 'P')
यदि आप ऑब्जेक्ट प्रकार देखते हैं, तो आपको दृश्यों, ट्रिगर आदि की पूरी सूची मिल जाएगी।
अब, यदि आप इसे प्रत्येक डेटाबेस में खोजना चाहते हैं, तो आपको डेटाबेस के माध्यम से पुनरावृति करनी होगी। आप निम्न में से कोई एक कर सकते हैं:
यदि आप प्रत्येक डेटाबेस के माध्यम से बिना किसी खंड के खोजना चाहते हैं, तो यहां एक उत्तर में दिखाए गए अनुसार sp_MSforeachdb का उपयोग करें।
यदि आप केवल विशिष्ट डेटाबेस खोजना चाहते हैं, तो "DBName का उपयोग करें" और फिर खोज कमांड का उपयोग करें।
उस मामले में इसे पैरामीटरकृत करने से आपको बहुत लाभ होगा। ध्यान दें कि जिस डेटाबेस में आप खोज रहे हैं उसका नाम प्रत्येक क्वेरी (डेटाबेसऑन, डेटाबेस टू ...) में बदलना होगा। इसे देखें:
Declare @ObjectName VarChar (100)
Set @ObjectName = '%Customer%'
Select 'DatabaseOne' as DatabaseName, [name] as ObjectName, Type as ObjectType
From DatabaseOne.Sys.Objects
Where 1=1
and [Name] like @ObjectName
and Type in ('U', 'P')
UNION ALL
Select 'DatabaseTwo' as DatabaseName, [name] as ObjectName, Type as ObjectType
From DatabaseTwo.Sys.Objects
Where 1=1
and [Name] like @ObjectName
and Type in ('U', 'P')
UNION ALL
Select 'DatabaseThree' as DatabaseName, [name] as ObjectName, Type as ObjectType
From DatabaseThree.Sys.Objects
Where 1=1
and [Name] like @ObjectName
and Type in ('U', 'P')