2011-11-28 13 views
5

Sto utilizzando SQL Server 2005. Sto provando a SELEZIONARE un elenco di tabelle in uno dei miei database. Qui è la mia struttura del mio SQL Server:SQL Seleziona l'elenco di tabelle in un database

- <IP>(SQL Server 9.0 -userlogin) 
    - Databases 
     - Company 
      - Tables 
      - dbo.UserDB 
      - dbo.detailsDB 
      - dbo.goodsDB 

vorrei recuperare i valori di dbo.UserDB, dbo.detailsDB, dbo.goodsDB

Ma io non so che cosa è la query SQL esatto necessario.

Ho provato molti modi, come

SELECT * FROM userlogin.Tables; e

SELECT * FROM userlogin.Company.Tables;, ma nessuno di loro opere.

Ho visto alcuni post che suggeriscono l'utilizzo di show databases e show tables, ma non sembrano funzionare altrettanto bene.

È possibile selezionare un elenco di nomi tabella in un database in primo luogo?

Grazie per l'aiuto in anticipo.


Grazie per il collegamento MSDNA fornito da @TomTom, ora posso elencare le mie tabelle nel mio database.

Tuttavia, vorrei elencare tabelle specifiche in cui TABLE_NAME contiene "utente".

Come posso farlo? Sto cercando il seguente SQL, ma non visualizza risultato al momento:

SELECT DISTINCT TABLE_NAME 
FROM Company.INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME LIKE '%"user"%'; 
GO 

risposta

5

provare l'information_schema.

http://msdn.microsoft.com/en-us/library/ms186778.aspx

contengono tutte le informazioni sullo schema si ha bisogno.

+0

grazie per il collegamento utile. Ora posso elencare tutti i miei database. Tuttavia, cosa succede se voglio elencare un database in cui il nome contiene per es. "utente"? Sto cercando il seguente sql: SELECT DISTINCT TABLE_NAME FROM Company.INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME LIKE '% "utente"% "; GO – gymcode

+1

@RUiHAO - vuoi elencare un database o tabelle? Rimuovi l'utente "around" così "%" utente "%" diventa "% utente%". –

+0

@Lieven Scusate il mio errore, voglio un elenco di tabelle .Il tuo metodo ha funzionato. Grazie mille! – gymcode

2

Prova:

SELECT * 
from sysobjects 
where type = 'U' AND 
NAME LIKE '%user%' 
GO 
+0

no lavoro, mi dà dei tavoli divertenti – gymcode

+1

Deprecato - dovresti usare 'sys.tables' come da SQL Server 2005 e versioni successive –

4

È possibile utilizzare INFORMATION_SCHEMA come detto da @TomTom:

USE <<YOUR_DB_NAME>> 

SELECT TABLE_SCHEMA + '.' + TABLE_NAME, * 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_TYPE = 'BASE TABLE' 
ORDER BY TABLE_SCHEMA + '.' + TABLE_NAME 

È possibile personalizzare al di sopra di query secondo le vostre esigenze.

Per la vostra altra domanda per trovare le tabelle in cui il nome contiene 'utente', eseguire l'istruzione seguente:

USE <<YOUR_DB_NAME>> 
Exec sp_tables '%user%' 
5

Utilizzare il nuovo catalogo di sistema sys in SQL Server 2005 e fino:

SELECT Name 
FROM sys.tables 
WHERE is_ms_shipped = 0 -- only list *your* tables - not the system/MS table 

Puoi leggere ulteriori informazioni sulle viste del catalogo di sistema e su come interrogarle nel numero MSDN Books Online - e stai attento - ci sono lotti altro da leggere e imparare!

3

È possibile utilizzare questo

Use ***database name*** 

SELECT * 
FROM sys.tables 
WHERE name like '%user%' 

Siamo spiacenti, visto che @marc_s ha fornito la risposta prima di me!

Problemi correlati