Відповіді:
Виконати:
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
Відредаговано: 14:36 2/5/2013
Оновлено з точним database_id, воно повинно бути більше 4, щоб пропустити список системних баз даних, які мають ідентифікатор бази даних від 1 до 4.
SELECT *
FROM sys.databases d
WHERE d.database_id > 4
SELECT [name]
FROM master.dbo.sysdatabases
WHERE dbid > 4
Працює на нашому SQL Server 2008
ID
5 і 6 будуть ReportServer
і ReportServerTempDB
якщо ви SQL Server Reporting Services
встановили.
Оскільки ви використовуєте .NET, ви можете використовувати об’єкти управління 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();
Не плутайтесь. Використовуйте наведений нижче простий запит, щоб отримати всі бази даних,
select * from sys.databases
Якщо вам потрібні лише визначені користувачем бази даних;
select * from sys.databases WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb');
Деякі назви системних баз даних (ресурс, дистрибутив, сервіс звітів, reportservicetempdb) просто вставити їх у запит. Якщо у вас за замовчуванням є вказані вище db-адреси.
SELECT [name]
FROM master.dbo.sysdatabases
WHERE dbid > 4 and [name] <> 'ReportServer' and [name] <> 'ReportServerTempDB'
Це працюватиме як для обох умов, чи ввімкнено звітність, чи ні
Я використовую наступний код об’єктів управління SQL Server, щоб отримати список баз даних, які не є системними базами даних і не є знімками.
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 Server 2014 або .SqlServer.Smo \ 12.0.0.0
Якщо ви хочете опустити системні бази даних та таблиці ReportServer (якщо вони встановлені):
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 2008/2012/2014. Більшість запитів надходить із збереженої процедури " sp_databases ". Я видаляю лише непотрібний стовпчик і додаю там, де умови.
Не впевнений, що це буде опускати бази даних сервера звітів, оскільки я не запускаю її, але з того, що я бачив, я можу опустити бази даних, що належать користувачам системи, за допомогою цього 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