답변:
실행 :
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
편집 : 오후 2시 36 분 2/5/2013
정확한 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에서 작동
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 [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 Server 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