sql >> Database >  >> RDS >> Sqlserver

Hoe vermeld ik alle tabellen in alle databases in SQL Server in één resultaatset?

voor een eenvoudige manier om alle tafels op de server te krijgen, probeer dit:

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

het zal een enkele kolom teruggeven die de server+database+schema+tabelnaam:sample output bevat:

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

als u geen SQL Server 2005 of hoger gebruikt, vervangt u de DECLARE @AllTables table met CREATE TABLE #AllTables en dan elke @AllTables met #AllTables en het zal werken.

BEWERKEN
hier is een versie waarmee een zoekparameter kan worden gebruikt op elk deel of delen van de server+database+schema+tabelnamen:

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

stel @Search in op NULL voor alle tabellen, stel het in op dingen als 'dbo.users' of 'users' of '.master.dbo' of voeg zelfs jokertekens toe zoals '.master.%.u', enz.



  1. MySQL-aantal items binnen in clausule

  2. Query's herschrijven om de prestaties te verbeteren

  3. Problemen met UTF-8-tekens; wat ik zie is niet wat ik heb opgeslagen

  4. Verbindingstime-out instellen in SQLAlchemy