web-dev-qa-db-fra.com

Obtention de la liste des tables et des champs de chacune d’elles dans une base de données

Je cherche à créer un ORM de base (uniquement pour le plaisir) et je me demandais s'il y avait un moyen de retourner la liste des tables dans une base de données ainsi que les champs de chaque table.

En utilisant cela, je veux pouvoir parcourir le jeu de résultats (en C #), puis dire que pour chaque table du jeu de résultats, procédez comme suit (par exemple, utilisez la réflexion pour créer une classe qui contiendra ou contiendra xyz).

De plus, quels sont les bons blogs en ligne pour SQL Server? Je sais que cette question concerne vraiment l'utilisation de SP et de bases de données système dans Sql Server. Les requêtes générales me conviennent, alors certains blogs qui couvrent ce type de fonctionnalités m'intéressent.

Merci

71
GurdeepS

Est-ce ce que vous recherchez:

Utilisation de la vue CATALOGUE D'OBJETS

 SELECT T.name AS Table_Name ,
       C.name AS Column_Name ,
       P.name AS Data_Type ,
       P.max_length AS Size ,
       CAST(P.precision AS VARCHAR) + '/' + CAST(P.scale AS VARCHAR) AS Precision_Scale
FROM   sys.objects AS T
       JOIN sys.columns AS C ON T.object_id = C.object_id
       JOIN sys.types AS P ON C.system_type_id = P.system_type_id
WHERE  T.type_desc = 'USER_TABLE';

Utilisation de la vue INFORMATIONS SCHEMA

  SELECT TABLE_SCHEMA ,
       TABLE_NAME ,
       COLUMN_NAME ,
       ORDINAL_POSITION ,
       COLUMN_DEFAULT ,
       DATA_TYPE ,
       CHARACTER_MAXIMUM_LENGTH ,
       NUMERIC_PRECISION ,
       NUMERIC_PRECISION_RADIX ,
       NUMERIC_SCALE ,
       DATETIME_PRECISION
FROM   INFORMATION_SCHEMA.COLUMNS;

Référence: Mon blog - http://dbalink.wordpress.com/2008/10/24/querying-the-object-catalog-and-information-schema-views/

151
MarlonRibunal

Les tables ::

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

colonnes ::

SELECT * FROM INFORMATION_SCHEMA.COLUMNS 

ou

SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='your_table_name'
34
ZombieSheep

Obtenir la liste de toutes les tables et les champs de la base de données:

Select *
From INFORMATION_SCHEMA.COLUMNS
Where TABLE_CATALOG Like 'DatabaseName'

Obtenir la liste de tous les champs de la table:

Select *
From INFORMATION_SCHEMA.COLUMNS
Where TABLE_CATALOG Like 'DatabaseName' And TABLE_NAME Like 'TableName' 
13
ShelS
SELECT * FROM INFORMATION_SCHEMA.COLUMNS
8
JeremyDWill

J'ai testé quelques solutions et trouvé que

Select *
From INFORMATION_SCHEMA.COLUMNS

vous donne les informations de colonne pour votre base de données CURRENT/default.

Select *
From <DBNAME>.INFORMATION_SCHEMA.COLUMNS

, sans les <et>, vous donne les informations de colonne pour la base de données DBNAME.

7
Jie

Votre autre ami intégré ici est le sproc système SP_HELP.

utilisation de l'échantillon ::

sp_help <MyTableName>

Il renvoie beaucoup plus d'informations que vous n'en aurez réellement besoin, mais au moins 90% de vos besoins éventuels seront pris en compte.

4
ZombieSheep

Il suffit de jeter ceci - facile à copier/coller dans un document Word ou Google:

PRINT '<html><body>'
SET NOCOUNT ON
DECLARE @tableName VARCHAR(30)
DECLARE tableCursor CURSOR LOCAL FAST_FORWARD FOR
    SELECT T.name AS TableName 
      FROM sys.objects AS T
     WHERE T.type_desc = 'USER_TABLE'
     ORDER BY T.name
OPEN tableCursor
FETCH NEXT FROM tableCursor INTO @tableName
WHILE @@FETCH_STATUS = 0 BEGIN
    PRINT '<h2>' + @tableName + '</h2>'
    PRINT '<pre>'
    SELECT LEFT(C.name, 30) AS ColumnName,
           LEFT(ISC.DATA_TYPE, 10) AS DataType,
           C.max_length AS Size,
           CAST(P.precision AS VARCHAR(4)) + '/' + CAST(P.scale AS VARCHAR(4)) AS PrecScale,
           CASE WHEN C.is_nullable = 1 THEN 'Null' ELSE 'No Null' END AS [Nullable],
           LEFT(ISNULL(ISC.COLUMN_DEFAULT, ' '), 5)  AS [Default],
           CASE WHEN C.is_identity = 1 THEN 'Identity' ELSE '' END AS [Identity]
    FROM   sys.objects AS T
           JOIN sys.columns AS C ON T.object_id = C.object_id
           JOIN sys.types AS P ON C.system_type_id = P.system_type_id
           JOIN INFORMATION_SCHEMA.COLUMNS AS ISC ON T.name = ISC.TABLE_NAME AND C.name = ISC.COLUMN_NAME
    WHERE  T.type_desc = 'USER_TABLE'
      AND  T.name = @tableName
    ORDER BY T.name, ISC.ORDINAL_POSITION
    PRINT '</pre>'
    FETCH NEXT FROM tableCursor INTO @tableName

END

CLOSE tableCursor
DEALLOCATE tableCursor
SET NOCOUNT OFF
PRINT '</body></html>'
2
Manni Marquesa

Pour MYSQL:

Select *
From INFORMATION_SCHEMA.COLUMNS
where TABLE_SCHEMA = "<DatabaseName>"
1
Jyotiranjan

Cela vous donnera toutes les tables créées par l'utilisateur:

select * from sysobjects where xtype='U'

Pour obtenir les cols:

Select * from Information_Schema.Columns Where Table_Name = 'Insert Table Name Here'

De plus, je trouve que http://www.sqlservercentral.com/ est une très bonne ressource de base de données.

1
brendan

Cela renverra le nom de la base de données, le nom de la table, le nom de la colonne et le type de données de la colonne spécifiée par un paramètre de base de données:

declare @database nvarchar(25)
set @database = ''

SELECT cu.table_catalog,cu.VIEW_SCHEMA, cu.VIEW_NAME, cu.TABLE_NAME,   
cu.COLUMN_NAME,c.DATA_TYPE,c.character_maximum_length
from INFORMATION_SCHEMA.VIEW_COLUMN_USAGE as cu
JOIN INFORMATION_SCHEMA.COLUMNS as c
on cu.TABLE_SCHEMA = c.TABLE_SCHEMA and c.TABLE_CATALOG = 
cu.TABLE_CATALOG
and c.TABLE_NAME = cu.TABLE_NAME
and c.COLUMN_NAME = cu.COLUMN_NAME
where cu.TABLE_CATALOG = @database
order by cu.view_name,c.COLUMN_NAME
0
Tony Gallone

SELECT * FROM INFORMATION_SCHEMA.COLUMNS oublie tout

SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS pour obtenir tous les noms de tables. Essayez-le sur sqlserver,

0
nafaa jamel

J'ai trouvé un moyen facile d'extraire les détails des tables et des colonnes d'une base de données particulière à l'aide du développeur SQL.

Select *FROM USER_TAB_COLUMNS
0
Sampath Kumar S