首页 文章

从SQL Server获取数据库列表

提问于
浏览
290

如何获取SQL Server实例上的可用数据库列表?我打算在VB.NET的组合框中列出它们 .

15 回答

  • 23

    我使用以下SQL Server Management Objects代码来获取不是't system databases and aren't快照的数据库列表 .

    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();
    }
    
  • -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”系统存储过程 . 我只删除不需要的列并添加条件 .

  • 75

    也许我是渡渡鸟!

    show databases; 为我工作 .

  • 467

    由于您使用的是.NET,因此可以使用SQL Server Management Objects

    Dim server As New Microsoft.SqlServer.Management.Smo.Server("localhost")
    For Each db As Database In server.Databases
        Console.WriteLine(db.Name)
    Next
    
  • 1

    鉴于非用户数据库数量的模糊性,您应该添加:

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

    并添加报告服务数据库的名称

  • -1

    在SQL Server 7中,dbid 1到4是系统dbs .

  • 5

    要排除系统数据库:

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

    在SQL Server 2008 R2中,这适用于:

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

    并仅列出用户创建的数据库 .

  • 13

    要排除系统数据库:

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

    编辑:2013年2月2日下午2:36

    更新了准确的database_id,它应该大于4,以跳过列出数据库ID介于1和4之间的系统数据库 .

    SELECT * 
    FROM sys.databases d
    WHERE d.database_id > 4
    
  • 20

    执行:

    SELECT name FROM master.sys.databases

    这是现在的首选方法,而不是 dbo.sysdatabases ,已经弃用了一段时间 .


    执行此查询:

    SELECT name FROM master.dbo.sysdatabases
    

    或者如果你愿意的话

    EXEC sp_databases
    
  • 1

    不确定这是否会省略报表服务器数据库,因为我没有运行它,但从我看到的情况来看,我可以使用此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]
    
  • 48
    SELECT [name] 
    FROM master.dbo.sysdatabases 
    WHERE dbid > 4
    

    适用于我们的SQL Server 2008

  • -4
    SELECT [name] 
    FROM master.dbo.sysdatabases 
    WHERE dbid > 4 and [name] <> 'ReportServer' and [name] <> 'ReportServerTempDB'
    

    这适用于两种情况,是否启用报告

  • -4

    您可以使用以下命令查找所有数据库名称: -

    select name from sys.sysdatabases
    
  • 2

    不要混淆,使用下面的简单查询来获取所有数据库,

    select * from sys.databases
    

    如果你只需要用户定义的数据库;

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

    一些系统数据库名称是(resource,distribution,reportservice,reportservicetempdb),只需将其插入查询即可 . 如果您的机器中有上述数据库作为默认值 .

相关问题