Yanıtlar:
Yürütme:
SELECT name FROM master.sys.databases
Bir dbo.sysdatabases
süredir kullanımdan kaldırılmış olan bu, şimdi tercih edilen yaklaşımdır .
Bu sorguyu yürütün:
SELECT name FROM master.dbo.sysdatabases
ya da isterseniz
EXEC sp_databases
exec sp_databases
çalışmadı. Diğer ikisi ( master.dbo.sysdatabases
ve sys.databases
) hala çalışıyor.
Sistem veritabanlarını hariç tutmak için:
SELECT [name]
FROM master.dbo.sysdatabases
WHERE dbid > 6
Düzenlendi: 14:36 14.02.2013
Doğru database_id ile güncellendi, 1 ve 4 arasında veritabanı kimliğine sahip sistem veritabanlarının listelenmesini atlamak 4'ten büyük olmalıdır.
SELECT *
FROM sys.databases d
WHERE d.database_id > 4
SELECT [name]
FROM master.dbo.sysdatabases
WHERE dbid > 4
SQL Server 2008 üzerinde çalışır
ID
5 ve 6 olacak ReportServer
ve ReportServerTempDB
sen varsa SQL Server Reporting Services
yüklü.
.NET kullandığınız için SQL Server Yönetim Nesneleri'ni kullanabilirsiniz.
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();
Kafanız karışmasın, tüm veritabanlarını almak için aşağıdaki basit sorguyu kullanın,
select * from sys.databases
Sadece kullanıcı tanımlı veritabanlarına ihtiyacınız varsa;
select * from sys.databases WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb');
Sistem veritabanı adlarından bazıları (kaynak, dağıtım, rapor servisi, report_hizmeti) sadece sorguya ekleyin. U varsayılan olarak yukarıdaki db's makinenizde varsa.
SELECT [name]
FROM master.dbo.sysdatabases
WHERE dbid > 4 and [name] <> 'ReportServer' and [name] <> 'ReportServerTempDB'
Raporlama etkin olsun ya da olmasın, her iki koşul için de çalışır
Sistem veritabanları olmayan ve anlık görüntüler olmayan veritabanlarının bir listesini almak için aşağıdaki SQL Server Yönetim Nesneleri kodunu kullanıyorum.
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();
veya foreach (var Db in new Microsoft.SqlServer.Management.Smo.Server("localhost").Databases)
.NET 4.0 + SQL Server 2014 veya .SqlServer.Smo \ 12.0.0.0
Sistem veritabanlarını ve ReportServer tablolarını (yüklenmişse) atlamak istiyorsanız:
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
Bu Sql Server 2008/2012/2014 üzerinde çalışır. Sorgunun çoğu " sp_databases " sistem saklı yordamından gelir. Sadece gereksiz sütunu kaldırdım ve koşullar nereye eklendi.
Emin değilim ben bir çalıştırmıyorum beri Rapor sunucusu veritabanlarını atlayacak, ama ne gördüm, ben bu SQL ile sistem kullanıcı sahibi veritabanları atlayabilirsiniz:
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]
belki ben bir dodo'yum!
show databases;
benim için çalıştı.
Tüm veritabanı adlarını şu şekilde bulabilirsiniz: -
select name from sys.sysdatabases
Sistem veritabanlarını hariç tutmak için:
SELECT name FROM master.dbo.sysdatabases where sid <>0x01
sid
üzerinde sütun yoksys.databases
owner_sid