Jawaban:
Menjalankan:
SELECT name FROM master.sys.databases
Ini pendekatan yang disukai sekarang, daripada dbo.sysdatabases
, yang telah ditinggalkan untuk beberapa waktu.
Jalankan permintaan ini:
SELECT name FROM master.dbo.sysdatabases
atau jika Anda suka
EXEC sp_databases
exec sp_databases
tidak berfungsi. Dua lainnya ( master.dbo.sysdatabases
dan sys.databases
) masih berfungsi.
Untuk mengecualikan basis data sistem:
SELECT [name]
FROM master.dbo.sysdatabases
WHERE dbid > 6
Diedit: 14:36 2/5/2013
Diperbarui dengan database_id yang akurat, Ini harus lebih besar dari 4, untuk melewati daftar sistem database yang memiliki id database antara 1 dan 4.
SELECT *
FROM sys.databases d
WHERE d.database_id > 4
SELECT [name]
FROM master.dbo.sysdatabases
WHERE dbid > 4
Bekerja pada SQL Server 2008 kami
ID
5 dan 6 akan ReportServer
dan ReportServerTempDB
jika Anda telah SQL Server Reporting Services
menginstal.
Karena Anda menggunakan .NET Anda dapat menggunakan Objek Manajemen SQL Server
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();
Jangan bingung, Gunakan kueri sederhana di bawah ini untuk mendapatkan semua basis data,
select * from sys.databases
Jika Anda hanya membutuhkan database yang ditentukan Pengguna;
select * from sys.databases WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb');
Beberapa nama basis data Sistem adalah (sumber daya, distribusi, layanan laporan, reportervicetempdb) cukup masukkan ke dalam kueri. Jika Anda memiliki db di atas di mesin Anda sebagai default.
SELECT [name]
FROM master.dbo.sysdatabases
WHERE dbid > 4 and [name] <> 'ReportServer' and [name] <> 'ReportServerTempDB'
Ini akan berfungsi untuk kedua kondisi, Apakah pelaporan diaktifkan atau tidak
Saya menggunakan kode Objek Manajemen Server SQL berikut untuk mendapatkan daftar database yang bukan database sistem dan bukan snapshot.
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();
atau foreach (var Db in new Microsoft.SqlServer.Management.Smo.Server("localhost").Databases)
dalam. NET 4.0 + SQL Server 2014 atau .SqlServer.Smo \
Jika Anda ingin menghilangkan database sistem dan tabel ReportServer (jika diinstal):
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
Ini berfungsi pada Sql Server 2008/2012/2014. Sebagian besar kueri berasal dari prosedur tersimpan sistem " sp_databases ". Saya hanya menghapus kolom yang tidak dibutuhkan dan menambahkan kondisinya.
Tidak yakin apakah ini akan menghilangkan database server Laporan karena saya tidak menjalankannya, tetapi dari apa yang saya lihat, saya bisa menghilangkan database milik pengguna sistem dengan SQL ini:
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]
mungkin saya seorang dodo!
show databases;
bekerja untukku.
Anda dapat menemukan semua nama basis data dengan ini: -
select name from sys.sysdatabases
Untuk mengecualikan basis data sistem:
SELECT name FROM master.dbo.sysdatabases where sid <>0x01
sid
kolomnya di atas sys.databases
mejaowner_sid