回答:
実行:
SELECT name FROM master.sys.databases
これはdbo.sysdatabases、しばらく推奨されなくなったではなく、現在推奨されるアプローチです。
このクエリを実行します。
SELECT name FROM master.dbo.sysdatabases
またはご希望の場合
EXEC sp_databases
exec sp_databasesしませんでした。他の2つ(master.dbo.sysdatabasesおよびsys.databases)はまだ機能します。
システムデータベースを除外するには:
SELECT [name]
FROM master.dbo.sysdatabases
WHERE dbid > 6
編集:午後2:36 2013年2月5日
正確な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で動作します
ID5と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 "システムストアドプロシージャからのものです。不要な列を削除して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 master.dbo.sysdatabases where sid <>0x01
sidその隣にはsys.databasesテーブルにその列がありませんowner_sid