programing

SQL Server에서 데이터베이스 목록 가져오기

itsource 2023. 4. 7. 22:52
반응형

SQL Server에서 데이터베이스 목록 가져오기

SQL Server 인스턴스에서 사용 가능한 데이터베이스 목록을 가져오려면 어떻게 해야 합니까?VB에서 콤보박스로 목록을 만들 예정입니다.그물.

실행:

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

편집일 : 2013년 2월 5일 오후 2시 36분

정확한 database_id로 갱신되어 데이터베이스 ID가 1~4인 시스템 데이터베이스 목록을 건너뛰려면 4보다 커야 합니다.

SELECT * 
FROM sys.databases d
WHERE d.database_id > 4
SELECT [name] 
FROM master.dbo.sysdatabases 
WHERE dbid > 4 

SQL Server 2008에서 동작합니다.

아래 쿼리를 사용하여 모든 데이터베이스를 가져옵니다.

select * from sys.databases

사용자 정의 데이터베이스만 필요한 경우

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

시스템 데이터베이스 이름 중 일부는 (resource, distribution, reportservice, reportservicetempdb) 위의 db가 기본적으로 시스템에 있는 경우 쿼리에 삽입합니다.

사용하고 있기 때문에.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 [name] 
FROM master.dbo.sysdatabases 
WHERE dbid > 4 and [name] <> 'ReportServer' and [name] <> 'ReportServerTempDB'

이 조작은, 리포트 사용의 유무에 관계없이, 양쪽 모두의 조건에 대응합니다.

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

시스템 데이터베이스 및 ReportServer 테이블을 생략하는 경우(설치된 경우)

select DATABASE_NAME = db_name(s_mf.database_id)
from sys.master_files s_mf
where
    s_mf.state = 0 -- ONLINE
    and 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" 시스템 저장 프로시저에서 가져옵니다.불필요한 컬럼만 삭제하고 조건을 추가했습니다.

Report 서버 데이터베이스를 실행하고 있지 않기 때문에 생략할 수 있을지 어떨지는 모르겠지만, 제가 본 바로는 다음 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]

SQL Server 7에서는 dbid 1 ~4가 시스템 dbs입니다.

내가 도도새일지도 몰라!

show databases;날 위해 일했어

MYSQL에서 데이터베이스를 나열하는 명령을 찾는 경우 다음 명령을 사용하십시오.SQL Server 로그인 후

show databases;

시스템 데이터베이스를 제외하려면:

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

언급URL : https://stackoverflow.com/questions/147659/get-list-of-databases-from-sql-server

반응형