Как получить список доступных баз данных на экземпляре SQL Server? Я планирую сделать их список в поле со списком в VB.NET.
Получить список баз данных из SQL Server
Ответ 1
Выполните этот запрос:
SELECT name FROM master.dbo.sysdatabases
или если вы предпочитаете
EXEC sp_databases
Ответ 2
в свете двусмысленности относительно количества не-пользовательских баз данных, вы, вероятно, должны добавить:
WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb');
и добавьте имена баз данных служб отчетов
Ответ 3
Чтобы исключить системные базы данных:
SELECT [name]
FROM master.dbo.sysdatabases
WHERE dbid > 6
Отредактировано: 14:36 PM 5/5/2013
Обновлено с точным значением database_id, должно быть больше 4, чтобы пропустить листинг которые имеют идентификатор базы данных между 1 и 4.
SELECT * 
FROM sys.databases d
WHERE d.database_id > 4
Ответ 4
SELECT [name] 
FROM master.dbo.sysdatabases 
WHERE dbid > 4 
Работает на нашем SQL Server 2008
Ответ 5
Поскольку вы используете .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
Ответ 6
Системные базы данных с идентификаторами 5 и 6 будут ReportServer и ReportServerTempDB, если у вас установлены службы отчетов SQL Server.
Ответ 7
Не путайте, используйте простой запрос, чтобы получить все базы данных,
select * from sys.databases
Если вам нужны только определенные пользователем базы данных,
select * from sys.databases WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb'); 
Некоторые из имен системной базы данных (resource, distribution, reportservice, reportservicetempdb) просто вставляют их в запрос. Если у вас есть вышеуказанный db на вашем компьютере по умолчанию.
Ответ 8
SELECT [name] 
FROM master.dbo.sysdatabases 
WHERE dbid > 4 and [name] <> 'ReportServer' and [name] <> 'ReportServerTempDB'
Это будет работать для обоих условий, независимо от того, включена ли отчетность.
Ответ 9
Я использую следующий код SQL Server Management Objects, чтобы получить список баз данных, которые не являются системными базами данных и не являются моментальными снимками.
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();
}
Ответ 10
Возможно, я додо!
 show databases; работал у меня.
Ответ 11
В SQL Server 7, dbid 1 до 4 - это системные dbs.
Ответ 12
Если вы хотите опустить системные базы данных и таблицы 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 Server 2008/2012/2014. Большая часть запросов поступает из хранимой процедуры системы "sp_databases". Я удаляю ненужный столбец и добавляю, где условия.
Ответ 13
Не уверен, что это опустит базы данных сервера отчетов, так как я их не запускаю, но из того, что я видел, я могу опустить базы данных, принадлежащие системе, с этим 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]
Ответ 14
В SQL Server 2008 R2 это работает:
select name 
from master.sys.databases 
where owner_sid > 1;
И укажите только базы данных, созданные пользователем (ами).
Ответ 15
Вы можете найти все имена баз данных с помощью этого: -
 select name from sys.sysdatabases
Ответ 16
Чтобы исключить системные базы данных:
SELECT name FROM master.dbo.sysdatabases where sid <>0x01
