Получить список баз данных из SQL Server



Как я могу получить список доступных баз данных на экземпляре SQL Server? Я планирую сделать список из них в поле со списком в VB.NET.

677   15  

15 ответов:

выполнить:

SELECT name FROM master.sys.databases

это предпочтительный подход, а не dbo.sysdatabases, который был устаревшим в течение некоторого времени.


выполнить этот запрос:

SELECT name FROM master.dbo.sysdatabases

или, если вы предпочитаете

EXEC sp_databases

в свете неоднозначности в отношении количества непользовательских баз данных, вероятно, следует добавить:

WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb');

и добавьте имена баз данных служб reporting services

для исключения системных баз данных:

SELECT [name]
FROM master.dbo.sysdatabases
WHERE dbid > 6

отредактировано : 2: 36 PM 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

Так как вы используете .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

не путайтесь, используйте ниже простой запрос, чтобы получить все базы данных,

select * from sys.databases

Если вам нужны только пользовательские базы данных;

select * from sys.databases WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb'); 

некоторые имена системных баз данных (resource,distribution,reportservice, reportservicetempdb) просто вставляют его в запрос. Если у вас есть вышеуказанные БД в вашей машине по умолчанию.

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();
}

в SQL Server 7 dbid от 1 до 4-это системные базы данных.

Если вы хотите пропустить системные базы данных и таблицы 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 " системная хранимая процедура. Я только удаляю ненужный столбец и добавляю условия where.

Не уверен, что это опустит базы данных сервера отчетов, так как я не запускаю один, но из того, что я видел, я могу опустить системные пользовательские базы данных с этим 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

в SQL Server 2008 R2 это работает:

select name 
from master.sys.databases 
where owner_sid > 1;

и перечислите только базы данных, созданные пользователями.

для исключения системных баз данных:

SELECT name FROM master.dbo.sysdatabases where sid <>0x01

Comments

    Ничего не найдено.