जवाबों:
निष्पादित:
SELECT name FROM master.sys.databases
यह अब की बजाय पसंदीदा दृष्टिकोण है dbo.sysdatabases
, जिसे कुछ समय के लिए हटा दिया गया है।
इस प्रश्न को निष्पादित करें:
SELECT name FROM master.dbo.sysdatabases
या यदि आप पसंद करते हैं
EXEC sp_databases
exec sp_databases
काम नहीं किया। अन्य दो ( master.dbo.sysdatabases
और sys.databases
) अभी भी काम करते हैं।
सिस्टम डेटाबेस को बाहर करने के लिए:
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
SELECT [name]
FROM master.dbo.sysdatabases
WHERE dbid > 4
हमारे SQL सर्वर 2008 पर काम करता है
ID
5 और 6 के साथ सिस्टम डेटाबेस होगा ReportServer
और ReportServerTempDB
यदि आपने SQL Server Reporting Services
इंस्टॉल किया है।
चूंकि आप .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();
भ्रमित न हों, सभी डेटाबेस प्राप्त करने के लिए नीचे सरल क्वेरी का उपयोग करें,
select * from sys.databases
यदि यू केवल उपयोगकर्ता परिभाषित डेटाबेस की जरूरत है;
select * from sys.databases WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb');
सिस्टम डेटाबेस नामों में से कुछ हैं (संसाधन, वितरण, रिपोर्ट सेवा, रिपोर्टवेरिसिटेम्पडब) बस इसे क्वेरी में डालें। अगर आपके मशीन में डिफ़ॉल्ट रूप से उपरोक्त db है।
SELECT [name]
FROM master.dbo.sysdatabases
WHERE dbid > 4 and [name] <> 'ReportServer' and [name] <> 'ReportServerTempDB'
यह दोनों स्थिति के लिए काम करेगा, चाहे रिपोर्टिंग सक्षम हो या न हो
मैं उन डेटाबेस की सूची प्राप्त करने के लिए निम्न 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();
}
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 के रूप में
यदि आप सिस्टम डेटाबेस और रिपोर्ट सर्वर टेबल को छोड़ना चाहते हैं (यदि स्थापित है):
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 डेटाबेस " सिस्टम संग्रहीत कार्यविधि से आती है । मैं केवल अनावश्यक कॉलम हटाता हूं और जहां स्थितियां जोड़ता हूं।
सुनिश्चित नहीं है कि यह रिपोर्ट सर्वर डेटाबेस को छोड़ देगा क्योंकि मैं एक नहीं चल रहा हूं, लेकिन जो मैंने देखा है, मैं इस 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]
शायद मैं एक डोडो हूँ!
show databases;
मेरे लिए काम किया।
आप इसके साथ सभी डेटाबेस नाम पा सकते हैं: -
select name from sys.sysdatabases
सिस्टम डेटाबेस को बाहर करने के लिए:
SELECT name FROM master.dbo.sysdatabases where sid <>0x01
sid
में sys.databases
मेज पर उसका कोई स्तंभ नहीं हैowner_sid