Hoe krijg ik een lijst van alle tabellen in een database met TSQL?

Wat is de beste manier om de namen van alle tabellen in een specifieke database op SQL Server te krijgen?


Antwoord 1, autoriteit 100%

SQL Server 2000, 2005, 2008, 2012, 2014, 2016, 2017 of 2019:

SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'

Alleen tabellen uit een bepaalde database tonen

SELECT TABLE_NAME 
FROM [<DATABASE_NAME>].INFORMATION_SCHEMA.TABLES 
WHERE TABLE_TYPE = 'BASE TABLE'

Of,

SELECT TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_TYPE = 'BASE TABLE' 
    AND TABLE_CATALOG='dbName' --(for MySql, use: TABLE_SCHEMA='dbName' )

PS: voor SQL Server 2000:

SELECT * FROM sysobjects WHERE xtype='U' 

Antwoord 2, autoriteit 13%

SELECT sobjects.name
FROM sysobjects sobjects
WHERE sobjects.xtype = 'U'

Hier is een lijst met andere objecttypen waarnaar u ook kunt zoeken:

  • AF: aggregatiefunctie (CLR)
  • C: CONTROLEER beperking
  • D: Standaard of STANDAARD beperking
  • F: FOREIGN KEY beperking
  • L: Logboek
  • FN: scalaire functie
  • FS: Assemblage (CLR) scalaire functie
  • FT: Assembly (CLR) tabelwaardefunctie
  • IF: Inlined table-functie
  • IT: Interne tafel
  • P: Opgeslagen procedure
  • PC: Assembly (CLR) opgeslagen procedure
  • PK: PRIMARY KEY-beperking (type is K)
  • RF: replicatiefilter opgeslagen procedure
  • S: Systeemtabel
  • SN: Synoniem
  • SQ: Servicewachtrij
  • TA: Assemblage (CLR) DML-trigger
  • TF: Tabelfunctie
  • TR: SQL DML-trigger
  • TT: Tabeltype
  • U: Gebruikerstabel
  • UQ: UNIEKE beperking (type is K)
  • V: Bekijk
  • X: Uitgebreide opgeslagen procedure

Antwoord 3, autoriteit 6%

SELECT * FROM INFORMATION_SCHEMA.TABLES 

OF

SELECT * FROM Sys.Tables

Antwoord 4, autoriteit 2%

USE YourDBName
GO 
SELECT *
FROM sys.Tables
GO

OF

USE YourDBName
GO
SELECT * FROM INFORMATION_SCHEMA.TABLES 
GO

Antwoord 5

SELECT * FROM information_schema.tables
where TABLE_TYPE = 'BASE TABLE'

SQL Server 2012


Antwoord 6

exec sp_msforeachtable 'print ''?'''

Antwoord 7

SELECT name 
FROM sysobjects 
WHERE xtype='U' 
ORDER BY name;

(SQL Server 2000-standaard; nog steeds ondersteund in SQL Server 2005.)


Antwoord 8

select * from sysobjects where xtype='U'


Antwoord 9

SELECT sobjects.name
FROM sysobjects sobjects
WHERE sobjects.xtype = 'U'

Antwoord 10

Het nadeel van INFORMATION_SCHEMA.TABLESis dat het ook systeemtabellen zoals dtpropertiesen de MSpeer_...tabellen bevat, zonder manier om ze te onderscheiden van uw eigen tafels.

Ik raad aan om sys.objects(de nieuwe versie van de verouderde sysobjectsview), die het uitsluiten van de systeemtabellen ondersteunt:

select *
from sys.objects
where type = 'U'      -- User tables
and is_ms_shipped = 0 -- Exclude system tables

Antwoord 11

Nou, je kunt sys.objectsgebruiken om alle database-objecten te krijgen.

GO
 select * from sys.objects where type_desc='USER_TABLE' order by name
 GO

OF

--  For all tables
select * from INFORMATION_SCHEMA.TABLES 
GO 
  --- For user defined tables
select * from INFORMATION_SCHEMA.TABLES where TABLE_TYPE='BASE TABLE'
GO
  --- For Views
select * from INFORMATION_SCHEMA.TABLES where TABLE_TYPE='VIEW'
GO

Antwoord 12

--for oracle
select tablespace_name, table_name from all_tables;

Deze link kan hier veel meer informatie over geven
onderwerp


Antwoord 13

In SSMS, om alle volledig gekwalificeerde tabelnamen in een specifieke database te krijgen (bijv. “MijnDatabase”):

SELECT [TABLE_CATALOG] + '.' + [TABLE_SCHEMA] + '.' + [TABLE_NAME]
FROM   MyDatabase.INFORMATION_SCHEMA.Tables
WHERE  [TABLE_TYPE] = 'BASE TABLE' and [TABLE_NAME] <> 'sysdiagrams'
ORDER BY [TABLE_SCHEMA], [TABLE_NAME]

Resultaten:

  • MijnDatabase.dbo.MijnTabel1
  • MijnDatabase.dbo.MijnTabel2
  • MijnDatabase.MijnSchema.MijnTabel3
  • MijnDatabase.MijnSchema.MijnTabel4
  • enz.

Antwoord 14

Gebruik dit alstublieft. U krijgt tabelnamen samen met schemanamen:

SELECT SYSSCHEMA.NAME, SYSTABLE.NAME
FROM SYS.tables SYSTABLE
INNER JOIN SYS.SCHEMAS SYSSCHEMA
ON SYSTABLE.SCHEMA_ID = SYSSCHEMA.SCHEMA_ID

Antwoord 15

SELECT TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_TYPE='BASE TABLE' 
ORDER BY TABLE_NAME

Antwoord 16

Met dank aan Ray Vega, wiens reactie alle gebruikerstabellen in een database geeft…

exec sp_msforeachtable ‘print ”?”’

sp_helptext toont de onderliggende zoekopdracht, die samenvat tot…

select * from dbo.sysobjects o 
join sys.all_objects syso on o.id =  syso.object_id  
where OBJECTPROPERTY(o.id, 'IsUserTable') = 1 
and o.category & 2 = 0 

Antwoord 17

Met SELECT * FROM INFORMATION_SCHEMA.COLUMNSworden ook alle tabellen en gerelateerde kolommen weergegeven.

Other episodes