sql >> Database >  >> RDS >> Sqlserver

SQL Server TOON TABELLEN Equivalent

Zo nu en dan typ ik SHOW TABLES in SQL Server, in de verwachting een lijst met tabellen te krijgen.

Dat zou volkomen logisch zijn als ik MySQL of MariaDB zou gebruiken. Maar SQL Server/T-SQL heeft geen SHOW TABLES statement zoals MySQL of MariaDB, dus het werkt nooit. En ik vergeet het steeds. Maar gelukkig heeft SQL Server wel alternatieven.

Hier zijn vijf opties voor het verkrijgen van een lijst met tabellen in SQL Server. Deze kunnen worden gebruikt wanneer je die ongrijpbare SHOW TABLES probeert te vinden statement in SQL Server.

Optie 1 – sys.tables

De sys.tables systeemcatalogusweergave is speciaal ontworpen voor het retourneren van gebruikerstabelinformatie:

SELECT name
FROM sys.tables;

Dit retourneert de naam van alle gebruikerstabellen in de huidige database. U kunt overschakelen naar de juiste database door de instructie vooraf te laten gaan met USE <database name> waar <database name> is de naam van de database waarvoor u tabellen wilt weergeven.

De volgende instructie retourneert bijvoorbeeld alle gebruikerstabellen uit de KrankyKranes databank:

USE KrankyKranes;
SELECT name
FROM sys.tables;

Je kunt het schema ook retourneren als je wilt:

SELECT 
    SCHEMA_NAME(schema_id) AS schema_name,
    name AS table_name
FROM sys.tables;

Hier gebruikte ik de SCHEMA_NAME() functie om de waarde van de schema_id . te vertalen kolom in de werkelijke naam van het schema.

Optie 2 – sys.objects

U kunt ook de sys.objects . gebruiken systeemcatalogus bekijken. Als u deze optie kiest, kunt u deze filteren op type zodat alleen gebruikerstabellen worden geretourneerd:

SELECT name 
FROM sys.objects 
WHERE type = 'U';

Dit retourneert gebruikerstabellen uit de huidige database. Deze weergave bevat ook een schema_id kolom, zodat u de SCHEMA_NAME() . kunt gebruiken functie om dat indien nodig in de schemanaam te vertalen.

Optie 3 – information_schema.tables

De INFORMATION_SCHEMA.TABLES view retourneert één rij voor elke tabel of weergave in de huidige database waarvoor de huidige gebruiker machtigingen heeft.

We kunnen deze weergave op type filteren, zodat alleen basistabellen worden geretourneerd:

SELECT 
    TABLE_SCHEMA,
    TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_TYPE = 'Base Table';

De TABLE_SCHEMA kolom bevat de naam van het tabelschema, dus we hoeven de SCHEMA_NAME() niet te gebruiken functie om de schema-ID naar zijn naam te converteren.

Optie 4 – sp_tables

De sp_tables opgeslagen procedure retourneert een lijst met objecten die in de huidige omgeving kunnen worden opgevraagd. Dit betekent elke tabel of weergave, behalve synoniemenobjecten.

De snelste en gemakkelijkste manier om deze procedure aan te roepen is als volgt:

sp_tables;

Maar dat kan een lange lijst met objecten opleveren.

Het is meestal beter om specifieker te zijn. Bijvoorbeeld:

EXEC sp_tables
    @table_owner = 'dbo', 
    @table_qualifier = 'KrankyKranes', 
    @table_type = "'TABLE'";

Hier vertel ik de procedure om gebruikerstabellen te tonen in de KrankyKranes database die eigendom zijn van dbo .

De @table_type argument accepteert een door komma's gescheiden lijst met waarden. Dus als we weergaven willen opnemen, kunnen we het volgende doen:

EXEC sp_tables
    @table_owner = 'dbo', 
    @table_qualifier = 'Music', 
    @table_type = "'TABLE', 'VIEW'";

Optie 5 – dbo.sysobjects

Vóór SQL Server 2005 waren de dbo.sysobjects weergave was de weergave voor het tonen van tabellen en andere objecten.

Dus als u een oude versie van SQL Server gebruikt, kunt u dit doen:

SELECT name 
FROM dbo.sysobjects
WHERE xtype = 'U';

  1. Hoe u identiteitskolomwaarden kunt krijgen zonder de naam van de identiteitskolom te vermelden in Select - SQL Server / T-SQL-zelfstudie, deel 46

  2. Vermijd duplicaten in INSERT INTO SELECT-query in SQL Server

  3. Hoe selecteer ik alleen een datum uit een DATETIME-veld in MySQL?

  4. Postgres VOOR LUS