SQL सर्वर से डेटाबेस की सूची प्राप्त करें


381

मैं SQL सर्वर आवृत्ति पर उपलब्ध डेटाबेस की सूची कैसे प्राप्त कर सकता हूं? मैं VB.NET में एक कॉम्बो बॉक्स में उनकी सूची बनाने की योजना बना रहा हूं।

जवाबों:


614

निष्पादित:

SELECT name FROM master.sys.databases

यह अब की बजाय पसंदीदा दृष्टिकोण है dbo.sysdatabases, जिसे कुछ समय के लिए हटा दिया गया है।


इस प्रश्न को निष्पादित करें:

SELECT name FROM master.dbo.sysdatabases

या यदि आप पसंद करते हैं

EXEC sp_databases

5
@ गिया यह बैकवर्ड कॉम्पटेलिटी व्यू के रूप में मौजूद है। msdn.microsoft.com/en-us/library/ms179900%28v=SQL.110%29.aspx
क्रिस डाइवर

4
EXEC sp_dat डेटाबेस मेरे लिए निष्पादित करने में धीमा था ; 36 डेटाबेस के साथ एक उदाहरण पर 40 सेकंड। Sysdat डेटाबेस से चयन त्वरित था।
मार्के

10
@ChrisDiver ने जो कहा है, उस पर विस्तार करने के लिए: sys.dat डेटाबेस का नाम सेलेक्ट करें, अब dbo.sysdat डेटाबेस के बजाय पसंदीदा तरीका है, जिसे अब एक दशक के लिए हटा दिया गया है।
मीका

3
कम से कम SQL Server 2014 पर exec sp_databasesकाम नहीं किया। अन्य दो ( master.dbo.sysdatabasesऔर sys.databases) अभी भी काम करते हैं।
r2evans

86

गैर-उपयोगकर्ता डेटाबेस की संख्या के रूप में अस्पष्टता के प्रकाश में, आपको संभवतः जोड़ना चाहिए:

WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb');

और रिपोर्टिंग सेवा डेटाबेस के नाम जोड़ें


53

सिस्टम डेटाबेस को बाहर करने के लिए:

SELECT [name]
FROM master.dbo.sysdatabases
WHERE dbid > 6

संपादित: 2:36 PM 2/5/2013

सटीक डेटाबेस_आईडी के साथ अपडेट किया गया, यह लिस्टिंग सिस्टम डेटाबेस को छोड़ने के लिए 4 से अधिक होना चाहिए, जो 1 और 4 के बीच डेटाबेस आईडी कर रहे हैं।

SELECT * 
FROM sys.databases d
WHERE d.database_id > 4

7
यह काम नहीं करता। शायद आपका मतलब> 4 था? टेबल्स 5 और 6 उपयोगकर्ता टेबल हैं।
बॉक्स डेवलपर

1
ऐसा लगता है कि यह हमेशा 4 होना चाहिए, हालांकि मैं जिस सर्वर की जांच कर रहा हूं, उसमें 5 और 6 पदों पर "ReportServer" और "ReportServerTempDB" हैं।
Trisped

मेरे लिए> 6 करेंगे।
रोबब_ २०५

27
SELECT [name] 
FROM master.dbo.sysdatabases 
WHERE dbid > 4 

हमारे SQL सर्वर 2008 पर काम करता है


ID5 और 6 के साथ सिस्टम डेटाबेस होगा ReportServerऔर ReportServerTempDBयदि आपने SQL Server Reporting Servicesइंस्टॉल किया है।
चार्ल्स हेपनर

22

चूंकि आप .NET का उपयोग कर रहे हैं, इसलिए आप SQL सर्वर प्रबंधन ऑब्जेक्ट का उपयोग कर सकते हैं

Dim server As New Microsoft.SqlServer.Management.Smo.Server("localhost")
For Each db As Database In server.Databases
    Console.WriteLine(db.Name)
Next

var SDBLOC = new Microsoft.SqlServer.Management.Smo.Server("localhost").Databases.Cast<Microsoft.SqlServer.Management.Smo.Database>().Where(bs => !bs.IsSystemObject && bs.ID>6).ToList();
Robb_2015

मुझे संदेह है, यह (लोकलहोस्ट), कुछ कॉन्फ़िगरेशन फ़ाइल से पढ़ा जाता है। मैं इसे अपने "मायहोस्ट" के साथ काम नहीं कर सका (जो कि मेरा सही मेजबान नाम है, पर्यावरण द्वारा प्राप्त। मैचिनीनेम)। यदि मैं "मायहोस्ट" के साथ "लोकलहोस्ट" को बदल दूं तो क्या यह काम पूरा होगा?
अज़ीब.केपी

19

भ्रमित न हों, सभी डेटाबेस प्राप्त करने के लिए नीचे सरल क्वेरी का उपयोग करें,

select * from sys.databases

यदि यू केवल उपयोगकर्ता परिभाषित डेटाबेस की जरूरत है;

select * from sys.databases WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb'); 

सिस्टम डेटाबेस नामों में से कुछ हैं (संसाधन, वितरण, रिपोर्ट सेवा, रिपोर्टवेरिसिटेम्पडब) बस इसे क्वेरी में डालें। अगर आपके मशीन में डिफ़ॉल्ट रूप से उपरोक्त db है।


7
SELECT [name] 
FROM master.dbo.sysdatabases 
WHERE dbid > 4 and [name] <> 'ReportServer' and [name] <> 'ReportServerTempDB'

यह दोनों स्थिति के लिए काम करेगा, चाहे रिपोर्टिंग सक्षम हो या न हो


1
सावधान, यदि आपका सर्वर एक नामांकित उदाहरण है, तो ReportServer db नाम ReportServer $ InstanceName और ReportServer $ InstanceNameTempDB जैसे हैं। तो यह इस तरह से काम करेगा: SELECT [name] FROM master.dbo.sysdat डेटाबेस WHERE dbid> 4 और [name] NOT LIKE 'ReportServer%'
ToddK

5

मैं उन डेटाबेस की सूची प्राप्त करने के लिए निम्न SQL सर्वर प्रबंधन ऑब्जेक्ट कोड का उपयोग करता हूं जो सिस्टम डेटाबेस नहीं हैं और स्नैपशॉट नहीं हैं।

using Microsoft.SqlServer.Management.Smo;

public static string[] GetDatabaseNames( string serverName )
{
   var server = new Server( serverName );
   return ( from Database database in server.Databases 
            where !database.IsSystemObject && !database.IsDatabaseSnapshot
            select database.Name 
          ).ToArray();
}

oneliner: var DBsLOC = new Microsoft.SqlServer.Management.Smo.Server("localhost").Databases.Cast<Microsoft.SqlServer.Management.Smo.Database>().Where(bs => !bs.IsSystemObject && bs.ID>6).ToList();या foreach (var Db in new Microsoft.SqlServer.Management.Smo.Server("localhost").Databases).NET 4.0 + SQL सर्वर 2014 या .SqlServer.Smo \ 12.0.0.0 के रूप में
Robb_2015

2

यदि आप सिस्टम डेटाबेस और रिपोर्ट सर्वर टेबल को छोड़ना चाहते हैं (यदि स्थापित है):

select
            DATABASE_NAME   = db_name(s_mf.database_id)
             from
           sys.master_files s_mf
        where
            s_mf.state = 0 and -- ONLINE
            has_dbaccess(db_name(s_mf.database_id)) = 1
            and db_name(s_mf.database_id) NOT IN ('master', 'tempdb', 'model', 'msdb')
             and db_name(s_mf.database_id) not like 'ReportServer%'
        group by s_mf.database_id
        order by 1

यह Sql Server 2008/2012/2014 पर काम करता है। अधिकांश क्वेरी " sp_dat डेटाबेस " सिस्टम संग्रहीत कार्यविधि से आती है । मैं केवल अनावश्यक कॉलम हटाता हूं और जहां स्थितियां जोड़ता हूं।


1

SQL सर्वर 7 में, dbid 1 थ्रू 4 सिस्टम dbs हैं।


1

सुनिश्चित नहीं है कि यह रिपोर्ट सर्वर डेटाबेस को छोड़ देगा क्योंकि मैं एक नहीं चल रहा हूं, लेकिन जो मैंने देखा है, मैं इस SQL ​​के साथ सिस्टम उपयोगकर्ता के स्वामित्व वाले डेटाबेस को छोड़ सकता हूं:

    SELECT  db.[name] as dbname 
    FROM [master].[sys].[databases] db
    LEFT OUTER JOIN  [master].[sys].[sysusers] su on su.sid = db.owner_sid
    WHERE su.sid is null
    order by db.[name]

-1

शायद मैं एक डोडो हूँ!

show databases; मेरे लिए काम किया।


14
SQL सर्वर में नहीं
मार्टिन स्मिथ

1
मेरे जवाब ने मुझे फिर से मदद की। #blessed
thedanotto

इस आदेश ने मेरे लिए भी काम किया, अन्य परिणाम भी 528 वोटों के साथ काम नहीं किया।
ब्रानो

-4

SQL Server 2008 R2 में यह काम करता है:

select name 
from master.sys.databases 
where owner_sid > 1;

और केवल उपयोगकर्ता द्वारा बनाए गए डेटाबेस को सूचीबद्ध करें।


10
संपादित करें: यह बहुत गलत है! मालिक का owner_sid=1मतलब है sa, इसके बारे में कुछ खास नहीं है।
wqw


-4

सिस्टम डेटाबेस को बाहर करने के लिए:

SELECT name FROM master.dbo.sysdatabases where sid <>0x01

इसने मेरे अधिकांश डेटाबेस को बाहर कर दिया।
जेफ

आप खंड को क्यों जोड़ रहे हैं? यह सिस्टम डेटाबेस को बाहर कर देगा, ओपी इसके लिए नहीं पूछ रहा है। और अगली बार अगर आप कोई उत्तर जोड़ते हैं तो बताएं कि क्वेरी क्या करती है। और उसके बगल sidमें sys.databasesमेज पर उसका कोई स्तंभ नहीं हैowner_sid
जॉर्डन वैन आइजक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.