Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment répertorier toutes les tables de toutes les bases de données dans SQL Server dans un seul jeu de résultats ?

pour un moyen simple d'obtenir toutes les tables sur le serveur, essayez ceci :

SET NOCOUNT ON
DECLARE @AllTables table (CompleteTableName nvarchar(4000))
INSERT INTO @AllTables (CompleteTableName)
    EXEC sp_msforeachdb 'select @@SERVERNAME+''.''+''?''+''.''+s.name+''.''+t.name from [?].sys.tables t inner join sys.schemas s on t.schema_id=s.schema_id'
SET NOCOUNT OFF
SELECT * FROM @AllTables ORDER BY 1

il renverra une seule colonne contenant le nom du serveur + base de données + schéma + table :exemple de sortie :

CompleteTableName
--------------------------------------------
YourServer.YourDatabase1.YourSchema1.YourTable1
YourServer.YourDatabase1.YourSchema1.YourTable2
YourServer.YourDatabase1.YourSchema2.YourTable1
YourServer.YourDatabase1.YourSchema2.YourTable2
YourServer.YourDatabase2.YourSchema1.YourTable1

si vous n'êtes pas sur SQL Server 2005 ou supérieur, remplacez la table DECLARE @AllTables table avec CREATE TABLE #AllTables puis chaque @AllTables avec #AllTables et ça marchera.

MODIFIER
voici une version qui permettra d'utiliser un paramètre de recherche sur n'importe quelle partie ou parties du serveur+base de données+schéma+noms de table :

SET NOCOUNT ON
DECLARE @AllTables table (CompleteTableName nvarchar(4000))
DECLARE @Search nvarchar(4000)
       ,@SQL   nvarchar(4000)
SET @Search=null --all rows
SET @SQL='select @@SERVERNAME+''.''+''?''+''.''+s.name+''.''+t.name from [?].sys.tables t inner join sys.schemas s on t.schema_id=s.schema_id WHERE @@SERVERNAME+''.''+''?''+''.''+s.name+''.''+t.name LIKE ''%'+ISNULL(@SEARCH,'')+'%'''

INSERT INTO @AllTables (CompleteTableName)
    EXEC sp_msforeachdb @SQL
SET NOCOUNT OFF
SELECT * FROM @AllTables ORDER BY 1

définissez @Search sur NULL pour toutes les tables, définissez-le sur des éléments tels que 'dbo.users' ou 'users' ou '.master.dbo' ou même incluez des caractères génériques tels que '.master.%.u', etc.