2009-08-13 8 views

Répondre

2

Je suis sûr qu'il ya une « meilleure » façon, mais cela fonctionne:

SELECT * FROM sys.databases 
where owner_sid != 1 
+0

fonctionne pour moi dans le serveur SQL 2005 – Rajesh

+0

Cela montrera toutes les bases de données où le propriétaire n'est pas le login « sa ». Donc, si vous avez des bases de données utilisateur où le propriétaire est «sa», elles seront également exclues. – firedfly

0

La façon la plus simple est

exec sp_databases 

mais qui inclura les bases de données du système, de sorte que vous aurez besoin de les exclure manuellement. Vous ne savez pas s'il existe un autre système sproc qui le fera pour vous.

Alors que vous pouvez obtenir plus d'informations étendue en utilisant

select * from sys.databases 

Je suis tout à fait que le champ owner_sid est pas un indicateur fiable d'une base de données de système, puisque j'ai le même sid sur le système et certains utilisateurs bases de données sur mon serveur ici.

0
SELECT name, owner_sid 
FROM sys.databases 

owner_sid devrait fournir assez d'informations pour distinguer, bien que je remarque que mon Oslo_Repository sid a également été spécifié comme 1 , donc il pourrait ne pas être fiable à 100%.

2

Vous interrogez sys.databases et supprimez ceux du système. Les véritables bases de données système sont master, tempdb, model (c'est-à-dire db_id 1, 2 et 3) et mssqlsystemresource. Cependant mssqlsystemresource a un peu de magie derrière et ne semble pas exister. D'un autre côté, tout le monde, à l'exception du moteur SQL, considère que msdb est également une base de données système. Ainsi, la requête sera quelque chose comme:

select * from sys.databases 
where name not in (N'master', N'tempdb', N'model', N'msdb') 
+0

btw il y a aussi d'autres bases de données 'ambiguos', comme la base de données de distribution de réplication, ReportServer et ResportServerTempDB. –

+0

+1 Je pense que c'est une meilleure solution. –

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