तालिका नामों की खोज


99

मैं अपनी संग्रहीत प्रक्रियाओं में तार खोजने के लिए निम्नलिखित का उपयोग करता हूं:

use DBname
SELECT Name
FROM sys.procedures
WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%xxx%'

क्या उपरोक्त में संशोधन करना इतना आसान है कि यह एक विशिष्ट db "DBname" में तालिका नाम खोजता है?

जवाबों:



87
select name
  from DBname.sys.tables
 where name like '%xxx%'
   and is_ms_shipped = 0; -- << comment out if you really want to see them

बाहर लाइन टिप्पणी करने से बहुत and is_ms_shipped = 0;कुछ नहीं लगता
Whytheq

2
सामान्य रूप से छिपने वाली एकमात्र चीज डेटाबेस आरेख समर्थन तालिकाएं हैं, या केवल एक ही है। कार्यों / प्रक्रियाओं की तलाश में यह अधिक उपयोगी है।
रिचर्ड द किवी

स्कीमा नाम क्यों नहीं जोड़े गए? t.schema_id, s.name, t.Name को DBNAME.sys.tables से चुनें। जैसे ही t भीतरी DBNAME.sys.schemas में s के रूप में t.schema_id = s.schema.id पर जुड़ता है, जहाँ t.name '% yourtabletosearch%' और is_ms_shipped = के रूप में शामिल हो जाता है। ०
एकरोनोस १५'१६ को os:२os

10

यदि आप सभी डेटाबेस सर्वर-वाइड में सभी तालिकाओं में देखना चाहते हैं और आउटपुट प्राप्त कर सकते हैं तो आप अनिर्दिष्ट sp_MSforeachdb प्रक्रिया का उपयोग कर सकते हैं :

sp_MSforeachdb 'SELECT "?" AS DB, * FROM [?].sys.tables WHERE name like ''%Table_Names%'''

3
यह उत्तर एकमात्र उपयोगी है यदि आप नहीं जानते हैं कि किस डेटाबेस में तालिका हो सकती है
मैथ्यू

7

मैं मान रहा हूं कि आप डेटाबेस नाम को एक पैरामीटर के रूप में पारित करना चाहते हैं, न कि केवल चलाने के लिए:

SELECT  *
FROM    DBName.sys.tables
WHERE   Name LIKE '%XXX%'

यदि ऐसा है, तो आप क्वेरी में dbname जोड़ने के लिए गतिशील SQL का उपयोग कर सकते हैं:

DECLARE @DBName NVARCHAR(200) = 'YourDBName',
        @TableName NVARCHAR(200) = 'SomeString';

IF NOT EXISTS (SELECT 1 FROM master.sys.databases WHERE Name = @DBName)
    BEGIN
        PRINT 'DATABASE NOT FOUND';
        RETURN;
    END;

DECLARE @SQL NVARCHAR(MAX) = '  SELECT  Name
                                FROM    ' + QUOTENAME(@DBName) + '.sys.tables
                                WHERE   Name LIKE ''%'' + @Table + ''%''';

EXECUTE SP_EXECUTESQL @SQL, N'@Table NVARCHAR(200)', @TableName;

5

आप इसमें एक निश्चित स्ट्रिंग के साथ तालिकाओं को फ़िल्टर करने के लिए फ़िल्टर बटन का भी उपयोग कर सकते हैं। आप संग्रहीत प्रक्रियाओं और विचारों के साथ भी ऐसा कर सकते हैं।

यहां छवि विवरण दर्ज करें


4

@ [RichardTheKiwi] के उत्तर पर जोड़ना।

जब भी मैं तालिकाओं की सूची खोजता हूं, सामान्य तौर पर मैं उन सभी में से चयन करना चाहता हूं या उन्हें हटा देता हूं। नीचे एक स्क्रिप्ट है जो आपके लिए उन स्क्रिप्ट को जनरेट करता है।

जेनरेट की गई चुनिंदा स्क्रिप्ट में एक टेबलनेम कॉलम भी जोड़ा जाता है ताकि आप जान सकें कि आप किस तालिका को देख रहे हैं:

select 'select ''' + name + ''' as TableName, * from ' + name as SelectTable,
'delete from ' + name as DeleteTable
from sys.tables
where name like '%xxxx%'
and is_ms_shipped = 0; 


3

मुझे पता है कि यह एक पुराना धागा है, लेकिन यदि आप केस-इन्सेंसिव सर्च पसंद करते हैं:

SELECT * FROM INFORMATION_SCHEMA.TABLES 
WHERE Lower(TABLE_NAME) LIKE Lower('%%')

2

मैं आपके द्वारा प्राप्त किए गए प्रत्येक स्कीमा के लिए एक सरल समाधान पोस्ट करना चाहता हूं। यदि आप MySQL DB का उपयोग कर रहे हैं, तो आप बस अपने स्कीमा से सभी तालिका का नाम प्राप्त कर सकते हैं और उस पर WHERE-LIKE शर्त जोड़ सकते हैं। आप इसे सामान्य कमांड लाइन के साथ निम्नानुसार भी कर सकते हैं:

SHOW TABLES WHERE tables_in_<your_shcema_name> LIKE '%<table_partial_name>%';

जहां कमांड tables_in_<your_shcema_name>के कॉलम का नाम देता है SHOW TABLES

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.